02/09/11 10:21
Adone
Salve a tutti!
Vi pongo un'altra semplice domanda, a cui non trovo una risposta precisa.
La domanda riguarda sempre un algoritmo che conta il numero di occorrenze di una lettera in un testo. Il cuore dell'algoritmo è questo:
L'algoritmo funziona a meraviglia.
Tuttavia c'è un problema.
SE nel file testo.txt dopo l'ultima riga di testo c'è un "a capo", allora è come se il do-while facesse un giro in più e mi riconta un'altra volta l'ultima riga quindi ovviamnete il risultato viene sbagliato. Se io tolgo l'"a capo" finale dopo l'ultima riga, cioè se il cursore nel file testo.txt è posizionato subito dopo l'ultima parola dell'ultima riga allora il risultato viene perfetto. Come mai tutto ciò?
Il C è molto bello, ma mi "demoralizza" sempre per questi stupidi problemi che a volte mi fanno perdere delle ore quando il codice sembra perfetto.
Vi pongo un'altra semplice domanda, a cui non trovo una risposta precisa.
La domanda riguarda sempre un algoritmo che conta il numero di occorrenze di una lettera in un testo. Il cuore dell'algoritmo è questo:
int main (int argc, char *argv[]){ int i=0; int counter=0; char s[L]; char ch='a'; for(i=0;i<=L;i++){ s[i]=0;} FILE *fp; fp = fopen("testo.txt", "r"); do{ fgets(s, L, fp); printf("%s",s); // questo mi serve solo per vedere se sta fgettando giusto for(i=0; i<=(strlen(s));i++){ if(s[i]==ch) counter++;} } while(feof(fp)==0); printf("Il numero totale di a è: %d.\n", counter); }
L'algoritmo funziona a meraviglia.
Tuttavia c'è un problema.
SE nel file testo.txt dopo l'ultima riga di testo c'è un "a capo", allora è come se il do-while facesse un giro in più e mi riconta un'altra volta l'ultima riga quindi ovviamnete il risultato viene sbagliato. Se io tolgo l'"a capo" finale dopo l'ultima riga, cioè se il cursore nel file testo.txt è posizionato subito dopo l'ultima parola dell'ultima riga allora il risultato viene perfetto. Come mai tutto ciò?
Il C è molto bello, ma mi "demoralizza" sempre per questi stupidi problemi che a volte mi fanno perdere delle ore quando il codice sembra perfetto.
aaa