Programma linguaggio C
Ciao a tutti!
Ho davvero tanti problemi con la programmazione e se qualcuno mi desse una mano gliene sarei molto grata!
Devo risolvere l'esercizio seguente:
"Scrivere un programma in C per identificare la parola ripetuta più volte all'interno di un file di testo.
A tal proposito si facciano le seguenti assunzioni:
- Il nome del file viene specificato come primo argomento sulla linea di comando
- Il numero di caratteri e di parole nel file non è noto al momento della compilazione
- Il file contiene unicamente lettere maiuscole, spazi e caratteri di new-line.
- Il file di testo è composto da più righe
- Sono previste al massimo 5000 parole distinte
- Ciascuna parola è composta al massimo da 20 lettere
- Le parole sono separate da uno o più spazi
- In caso le parole ripetute più volte all’interno del testo siano più di una, stampare quella che
compare prima nel testo
- Viene altresì richiesto di stampare il numero di volte che tale parola compare nel testo"
La bozza di programma che ho scritto è:
#include
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
int i,flag,lung_elenco;
char parola[21],parola_corrente[21],elenco[5000];
int frequenza=0;
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("errore");
exit(1);
}
if(argc!=2){
printf("errore");
exit(1);
}
lung_elenco=0;
while(fscanf(fp,"%s",parola)!=EOF && lung_elenco<5000 ){
flag=0;
for(i=0;i
if(strcmp(parola_corrente, elenco )==0){
flag=1;
frequenza++;
}
}
if(flag==1){
strcpy(elenco[lung_elenco], parola_corrente);
frequenza=1;
lung_elenco++;
}
}
fclose(fp);
return 0;
}
Secondo voi sono molto fuori strada? Mi sono bloccata..

Ho davvero tanti problemi con la programmazione e se qualcuno mi desse una mano gliene sarei molto grata!
Devo risolvere l'esercizio seguente:
"Scrivere un programma in C per identificare la parola ripetuta più volte all'interno di un file di testo.
A tal proposito si facciano le seguenti assunzioni:
- Il nome del file viene specificato come primo argomento sulla linea di comando
- Il numero di caratteri e di parole nel file non è noto al momento della compilazione
- Il file contiene unicamente lettere maiuscole, spazi e caratteri di new-line.
- Il file di testo è composto da più righe
- Sono previste al massimo 5000 parole distinte
- Ciascuna parola è composta al massimo da 20 lettere
- Le parole sono separate da uno o più spazi
- In caso le parole ripetute più volte all’interno del testo siano più di una, stampare quella che
compare prima nel testo
- Viene altresì richiesto di stampare il numero di volte che tale parola compare nel testo"
La bozza di programma che ho scritto è:
#include
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
int i,flag,lung_elenco;
char parola[21],parola_corrente[21],elenco[5000];
int frequenza=0;
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("errore");
exit(1);
}
if(argc!=2){
printf("errore");
exit(1);
}
lung_elenco=0;
while(fscanf(fp,"%s",parola)!=EOF && lung_elenco<5000 ){
flag=0;
for(i=0;i
if(strcmp(parola_corrente, elenco )==0){
flag=1;
frequenza++;
}
}
if(flag==1){
strcpy(elenco[lung_elenco], parola_corrente);
frequenza=1;
lung_elenco++;
}
}
fclose(fp);
return 0;
}
Secondo voi sono molto fuori strada? Mi sono bloccata..

Risposte
Non mi sembri molto fuori strada.
Ti consiglio di fare è di leggere il file carattere per carattere non usando fscanf, in questo modo avrai molto più controllo e, secondo me, ti sarà più chiaro. I caratteri newline e spazio saranno da trattarsi allo stesso modo e il tuo ciclo avrà una flag che indicherà se sei "dentro" una parola o no.
Prova ad apportare questa modifica
EDIT:
Non mi è chiaro come utilizzi le due stringhe parola e parola_corrente. Prova a commentare il codice descrivendo per cosa userai le variabili.
Modifica il messaggio usando l'apposito tag ("code") per racchiudere il codice per cortesia
PS Buon natale!
Ti consiglio di fare è di leggere il file carattere per carattere non usando fscanf, in questo modo avrai molto più controllo e, secondo me, ti sarà più chiaro. I caratteri newline e spazio saranno da trattarsi allo stesso modo e il tuo ciclo avrà una flag che indicherà se sei "dentro" una parola o no.
Prova ad apportare questa modifica

EDIT:
Non mi è chiaro come utilizzi le due stringhe parola e parola_corrente. Prova a commentare il codice descrivendo per cosa userai le variabili.
Modifica il messaggio usando l'apposito tag ("code") per racchiudere il codice per cortesia
PS Buon natale!