Ĺadny brzuch
Witam!
Musze napisac program zliczajacy słowa znaki i linie w danym tekscie.
Prosta sprawa niby ale mam mały problem
Otoz, wszystko działa ładnie tylko w momencie sytuacji gdy mam słowo i zaraz po nim znak konca pliku , ostatnie słowo nie jest zaliczane.
Wyglada to mniej wiecej tak (EOF=Z^)
slowo^Z
wynik:
słów=0
znakow=5
lini=1
#include<string.h> #include <stdio.h> #include <conio.h> #include<ctype.h> int main() { char c; int spacja=0; int linia=0; int znak=0; int slowa=0; int bufor=0; do { if( isalpha(c) || isdigit(c)) { znak++; bufor++; } else if(isspace(c)) { if(c=='\n')//linia { linia++; if(bufor==1 || bufor==0) { bufor=0; } else { slowa++; bufor=0; } } else { if( bufor==1 || bufor==0) { bufor=0; } else { slowa++; bufor=0; } } } }while( ( c=getchar() ) !=EOF); printf(" Znakow: %d \n Lini: %d\n Slow: %d",znak,linia+1,slowa); return 0; }
a i pod pojeciem słowo rozumiem ciag > niz 1 znak:)
...
Arcktos: Twój sposób jest zdecydowanie mniej optymalny.
To znaczy, gdyby działał to by taki był. ;)
Poza tym z tego co wiem już chyba problem został rozwiązany. ;)
Użytkownik Chmurek edytował ten post 26 luty 2006, 14:21
Arcktos: Twój sposób jest zdecydowanie mniej optymalny.
To znaczy, gdyby działał to by taki był. ;)
Poza tym z tego co wiem już chyba problem został rozwiązany. ;)
Po pierwsze traktuje teraz jedną literę jako słowo, a Crisu zaznaczył, że przez słowo rozumie więcej niż jedną.
Po drugie zauważ ile razy przechodzisz przez te same znaki. Na początku wszystkie odczytujesz do linie, a później jeszcze raz przechodzisz całość, kiedy można raz. Oczywiście, że przy szybkościach dzisiejszych komputerów może ma to małe znaczenie, ale po co tak pisać skoro można lepiej? ;)
Użytkownik Chmurek edytował ten post 26 luty 2006, 15:25
Masz rację, ale jak już napisałeś nie ma to wielkiego znaczenia przy dzisiejszych prędkościac procesorów. Co do znaków to jest to chyba tak prosta poprawa(jeden if jak mniemam), że nie trzeba sobie nawet ym zawracać głowy(znaczy nie muszę tego pisać, każdy kto rozumie ten kod i tego potzrebuje dopisze sobie sam :))
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Musze napisac program zliczajacy słowa znaki i linie w danym tekscie.
Prosta sprawa niby ale mam mały problem
Otoz, wszystko działa ładnie tylko w momencie sytuacji gdy mam słowo i zaraz po nim znak konca pliku , ostatnie słowo nie jest zaliczane.
Wyglada to mniej wiecej tak (EOF=Z^)
slowo^Z
wynik:
słów=0
znakow=5
lini=1
#include<string.h> #include <stdio.h> #include <conio.h> #include<ctype.h> int main() { char c; int spacja=0; int linia=0; int znak=0; int slowa=0; int bufor=0; do { if( isalpha(c) || isdigit(c)) { znak++; bufor++; } else if(isspace(c)) { if(c=='\n')//linia { linia++; if(bufor==1 || bufor==0) { bufor=0; } else { slowa++; bufor=0; } } else { if( bufor==1 || bufor==0) { bufor=0; } else { slowa++; bufor=0; } } } }while( ( c=getchar() ) !=EOF); printf(" Znakow: %d \n Lini: %d\n Slow: %d",znak,linia+1,slowa); return 0; }
a i pod pojeciem słowo rozumiem ciag > niz 1 znak:)
...

Arcktos: Twój sposób jest zdecydowanie mniej optymalny.
To znaczy, gdyby działał to by taki był. ;)
Poza tym z tego co wiem już chyba problem został rozwiązany. ;)
Użytkownik Chmurek edytował ten post 26 luty 2006, 14:21
Arcktos: Twój sposób jest zdecydowanie mniej optymalny.
To znaczy, gdyby działał to by taki był. ;)
Poza tym z tego co wiem już chyba problem został rozwiązany. ;)

Po pierwsze traktuje teraz jedną literę jako słowo, a Crisu zaznaczył, że przez słowo rozumie więcej niż jedną.
Po drugie zauważ ile razy przechodzisz przez te same znaki. Na początku wszystkie odczytujesz do linie, a później jeszcze raz przechodzisz całość, kiedy można raz. Oczywiście, że przy szybkościach dzisiejszych komputerów może ma to małe znaczenie, ale po co tak pisać skoro można lepiej? ;)
Użytkownik Chmurek edytował ten post 26 luty 2006, 15:25
Masz rację, ale jak już napisałeś nie ma to wielkiego znaczenia przy dzisiejszych prędkościac procesorów. Co do znaków to jest to chyba tak prosta poprawa(jeden if jak mniemam), że nie trzeba sobie nawet ym zawracać głowy(znaczy nie muszę tego pisać, każdy kto rozumie ten kod i tego potzrebuje dopisze sobie sam :))