读取文本文件,将每个字符设置为小写并将其存储在数组中

时间:2016-03-17 13:40:40

标签: c

我想在文本文件中读取并将字符存储在数组中。但是存储的字符都必须较低,并保持字数的运行计数。我们可以假设我们不会再使用测试中的前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++;
         }
}

1 个答案:

答案 0 :(得分:2)

您的while循环有一些思考错误。我会向您概述它们,但不会修复它们,以便您可以修复它们并进行学习。

你写while(fgets(line, sizeof(line),...但是只读4或8个字符。为什么?阅读sizeof,然后查看您要问的大小。

在while循环中,您说char newWord[5000]。这意味着您要分配一个5000个字符的数组。但是在您的问题陈述中,您说&#34; ...测试中的5000个单词,并且不超过前15个字符&#34;。所以有一个思想错误,你需要一个5000个单词的数组 15个字符

但是,您在循环中声明此数组,这意味着它将在while循环的底部被销毁并在顶部重新创建。所以你松开了只读和存储的单词。您应该将数组分配到不会被销毁的位置,并在每次迭代时重新创建。

在tyour strcpy中,您无法确保仅复制前15个字符(根据您的问题陈述)。使用正确的复制功能来做到这一点。并且不要忘记终止复制的字符。

然后在while strtok...之后增加计数。这似乎不是计算单词数量的正确位置。

回到绘图板......