2016-03-17 2 views
-2

Я хотел бы прочитать в текстовом файле и сохранить символы в массиве. Но сохраненные символы должны быть одинарными и содержать счетчик количества слов. Мы можем предположить, что мы будем использовать не более того, что первые 5000 слов в тесте и не более, чем первые 15 символов в слове. Как бы я исправил, сделайте каждый символ в нижнем регистре.прочитайте текстовый файл, сделайте каждый символ в нижнем регистре и сохраните его в массиве

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 

    int main() 
    { 
      FILE *inFile; 
      char userInputFileName[100]; 
      char *line = malloc(sizeof(char)*100); 
      int count = 0; 
      char *token; 
      char delim[] = " ,.!;:\n"; 
      char *eachWord; 

      printf("Please enter the name of the text file \n"); 
      scanf("%s", &userInputFileName); 
      inFile = fopen(userInputFileName, "r"); 

      if(inFile == NULL) 
      { 
       fprintf(stderr, "Failed to open file \n"); 
       exit(1); 
      } 

      while(fgets(line, sizeof(line),inFile) 
      { 
       printf("%s\n", line); 
       char newWord[5000]; 

        while((eachWord = strtok(token, delim)) != NULL) 
        { 
         strcpy(newWord[count], eachWord); 
        } 
       count++; 
     } 
} 
+0

Ваша программа не компилируется. –

+0

Я только что редактировал вашу программу для компиляции. Вы забыли скобки. – Marievi

+0

вам также нужно хранить белые символы (пробел, новая строка)? –

ответ

2

Ваш while цикл имеет некоторые ошибки мышления. Я опишу их вам, но не буду исправлять их, чтобы вы могли их исправить и узнать.

Вы пишете while(fgets(line, sizeof(line),..., но это будет читать только 4 или 8 символов. Зачем? Читайте о sizeof, а затем посмотрите, что вы задаете.

В цикле while вы говорите char newWord[5000]. Это означает, что вы выделяете один массив из 5000 символов. Но в вашем заявлении о проблемах вы говорите «... 5000 слов в тесте и не более, чем первые 15 символов». Итак, есть мыслительная ошибка, и вам понадобится массив для 5000 слов 15 символов каждый.

Но вы объявляете этот массив в цикле, то есть он будет уничтожен в нижней части цикла while и воссоздан в верхней части. Таким образом, вы теряете слово (и), просто прочитанные и сохраненные. Вы должны выделить массив, где он не будет уничтожен и воссоздан с каждой итерацией.

В tyour strcpy вы не должны копировать только первые 15 символов (в соответствии с вашим заявлением о проблеме). Для этого используйте правильную функцию копирования. И не забудьте закончить копирование символов.

А затем после while strtok... вы увеличиваете счетчик. Это не кажется правильным местом для подсчета количества слов.

Вернуться к чертежной доске ...

Смежные вопросы