Lea el archivo de texto y el número de salida de las palabras, las palabras distintas y la palabra más utilizada.

Tengo que leer de un archivo de texto todas las palabras y mostrar el número total de palabras, el número de palabras distintas y la palabra que se usa con más frecuencia. Todavía soy un principiante, así que cualquier ayuda es increíble.

Al leer las palabras, los guiones / apóstrofes / puntuaciones se omiten, por lo que O’connor sería la misma palabra que Oconnor. <— No sé cómo hacer eso, así que cualquier ayuda sería genial.

Esto es lo que tengo hasta ahora, pero por ahora, cuando bash comstackrlo, aparece una advertencia con el strcpy y dice que no lo estoy usando correctamente. La salida para el número total de palabras funciona, pero me da 0 para el número de palabras distintas, y nada para la palabra más utilizada.

Cualquier ayuda sería increíble, gracias!

 #include  #include  #include  int main(int argc, char *argv[]) { int number=0; int i; char *temp; char *temp2; char word[2500][50]; int wordCount=0; int mostFreq=1; char mostFreqWord[2500][50]; int frequentCount=0; int distinctCount=0; int j; char *p; FILE *fp; //reads file! fp= fopen("COEN12_LAB1.txt", "r"); if(fp == NULL) // checks to see if file is empty { printf("File Missing!\n"); return 0; } while(fscanf(fp,"%s", word) == 1) //scans every word in the text file wordCount++; //counts number of words while(fscanf(fp,"%s",word) == 1) { for(i=0;i<wordCount;i++) { temp=word[i]; for(j=0;jmostFreq) { strcpy(mostFreqWord,word[i]); //this doesn't work } } distinctCount++; } } } printf("Total number of words: %d\n", wordCount); printf("Total number of distinct words: %d\n", distinctCount); printf("The most frequently appeared word is: %s \n", &mostFreqWord); fclose(fp); } 

El problema con strcpy() es, según lo diagnosticado por Principiante en su respuesta, que si está copiando a la mostFreqWord de los mostFreqWord , debe mostFreqWord porque es una matriz 2D.

Sin embargo, usted tiene un problema más fundamental. Su bucle de conteo de palabras se lee hasta EOF, y no retrocede el archivo para volver a empezar. Además, volver a leer el archivo de esa manera no es un algoritmo particularmente bueno (y no funcionaría en absoluto si estuvieras leyendo datos de otro progtwig).

Debes combinar los dos bucles. Cuente las palabras a medida que vayan llegando, pero también limpie la palabra (elimine los caracteres no alfabéticos, ¿o es que los caracteres no alfanuméricos, y _ subraya el recuento o no?), Y luego insértela en la lista de palabras si no ya aparece o aumente el recuento de frecuencia de la palabra si ya aparece.

Cuando termine la fase de entrada, debe tener listo el recuento del número de palabras distintas, y podrá encontrar las más frecuentes al escanear la lista de frecuencias para encontrar el máximo (y el número de índice donde apareció el máximo). ), y luego informar adecuadamente.