Ciao a tutti,
mi sto esercitando su funzioni e array in C, e ho un esercizio da svolgere che mi sta creando particolari problemi:
devo inserire una serie di parole in input, con certi criteri di limitazione (max 100 parole, max 100 caratteri per parola), e fornire in output le parole inserite (non ripetute) e la frequenza con di inserimento.
Esempio input TORINO MILANO TORINO ROMA GENOVA MILANO;
Esempio output:
TORINO 2
MILANO 2
ROMA 1
GENOVA 1
Ho scritto questo codice, la parte di input è gestita (credo) bene, ho dei dubbi sui confronti, e non riesco a produrre l'output richiesto.
#include <stdio.h>
#include <string.h>
#define MAXCITY 100
#define MAXCHAR 20
int main (int argc, const char * argv[])
{
typedef enum {TRUE, FALSE} bool;
char parole[MAXCITY][MAXCHAR]; //array di stringhe (stringa=array di char)
char end[5]="fine"; //parola per terminare ciclo
bool esci=FALSE; //inizializzo la variabile booleana a false
int kparole; //contatore numero parole
int i,j; //contatori di servizio
char citta[MAXCITY][MAXCHAR];
printf("\nInserire città\n");
//input si interrompe quando viene raggiunto il numero massimo di parole=100 oppure viene
//inserita la parola fine
while ((kparole<MAXCITY)||(esci==FALSE)){
gets(parole[kparole]);
if (strcmp(parole[kparole],end)==0){ //se la parola inserita è fine esce dal ciclo
esci=TRUE;
break;
}
else if (strlen(parole[kparole])>MAXCHAR){
//se la parola è più lunga di maxchar=20 non la conteggia
printf("\nparola troppo lunga");
}
else{
kparole++;
}
}
for (i=0;i<kparole;i++){ //stampo a video parole
printf("\n%s",parole[i]);
}
for (i=0;i<=kparole;i++){
for (j=i+1;j<kparole;j++){
if (strcmp(parole[i],parole[j])!=0){ //confronto stringhe
strcpy(citta[i], parole[i]);
}
}
}
printf("\n");
return 0;
}
Grazie.