23/06/12 16:02
Tusken
Ciao a tutti, ho un problema con un programma in C.
Dovrebbe leggere un file di testo e contare quante volte la stessa sequenza di parole viene ripetuta al suo interno.
Avevo pensato di iniziare copiando il testo in una stringa a parte in modo da eliminare tutti i caratteri per cui isalpha restituisce 0, così da avere solo le parole intervallate da uno spazio (con un'apposita condizione).
Tuttavia non riesco ad aggiungere parole all'array, probabilmente faccio confusione con i puntatori (non c'è un limite al numero di parole, quindi la memoria dev'essere allocata dinamicamente).
Compilando il programma mi dà dei warning su strcat e eseguendolo va in crash.
Vorrei chiedere qual è l'errore e, se possibile, qualche indizio su come procedere per il resto del programma (o eventualmente se c'è un metodo migliore per analizzare il testo senza contare i caratteri diversi dalle lettere).
Di seguito posto la parte di codice finora realizzata.
Grazie a tutti dell'aiuto!
Dovrebbe leggere un file di testo e contare quante volte la stessa sequenza di parole viene ripetuta al suo interno.
Avevo pensato di iniziare copiando il testo in una stringa a parte in modo da eliminare tutti i caratteri per cui isalpha restituisce 0, così da avere solo le parole intervallate da uno spazio (con un'apposita condizione).
Tuttavia non riesco ad aggiungere parole all'array, probabilmente faccio confusione con i puntatori (non c'è un limite al numero di parole, quindi la memoria dev'essere allocata dinamicamente).
Compilando il programma mi dà dei warning su strcat e eseguendolo va in crash.
Vorrei chiedere qual è l'errore e, se possibile, qualche indizio su come procedere per il resto del programma (o eventualmente se c'è un metodo migliore per analizzare il testo senza contare i caratteri diversi dalle lettere).
Di seguito posto la parte di codice finora realizzata.
Grazie a tutti dell'aiuto!
#include<stdio.h> #include<ctype.h> #include<string.h> int main(){ char s, word[100], *a1=malloc(sizeof(char)), *a2=malloc(sizeof(char)); int i=0; FILE *fp; if((fp=fopen("file.txt", "r"))==NULL){ printf("Il file non risulta accessibile"); return 0; } else{ s=fgetc(fp); while(!feof(fp)){ i++; if(isalpha(s) || s==' '){ a2=a1; a2=realloc(a1, sizeof(char)*(i+1)); strcat(a2, s); } s=fgetc(fp); } printf("%s", a2); fclose(fp); getch(); } }
aaa