【问题标题】:How do I count the number of words in a text file using C?如何使用 C 计算文本文件中的单词数?
【发布时间】:2022-05-19 00:21:22
【问题描述】:

我在为我的系统编程课程编写的程序方面需要一些帮助。它是用 C 语言编写的,我对 C 语言的经验非常非常少。我需要将三个文本文件合并为以下格式:

word1
word2
word3
...
wordX

我还要将所有三个文件中的每个单词都带入一个二维数组(字符串数组的数组)中,然后对它们使用某种排序方法。

我不应该在排序方面需要帮助,但我不知道如何从每个文本文件中获取字数或将它们放入数组中。


这是我计算文件中单词的功能。它不能在 gcc 上编译(可能出于明显的原因,但我不知道)。我有正确的想法吗?

int countWords(FILE f){
   int count = 0;
   char ch;
   while ((ch = fgetc(f)) != EOF){
       if (ch == '\n')
           count++;
       //return count; originally here, but shouldn't be.
   }
       return count;
}

编辑:我想我可以找到一种方法来计算程序中的行数,但我不确定这种方法是否与我在这里尝试做的有什么不同。 (我从来没有真正擅长处理文本文件。


我得到它来计算程序中的所有行。我想我有点生疏了。


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

int countWords(FILE *f){
   int count = 0;
   char ch;
   while ((ch = fgetc(f)) != EOF){
       if (ch == '\n')
           count++;
   }
   return count;
}
int main(void){

   int wordCount = 0;
   FILE *rFile = fopen("american0.txt", "r");
   wordCount += countWords(rFile);
   printf("%d", wordCount);
   return 0;
}

我有点忘了 FILE *fileName 的指针的事情

【问题讨论】:

  • 您能发布您收到的编译器错误消息吗?
  • 所以,鉴于每个单词都在不同的行上,您真的想计算行数:对吗?
  • HW3.c:在函数âcountWordsâ中:HW3.c:9:错误:âfgetcâ HW3.c的参数1的类型不兼容:在函数âmainâ中:HW3.c:19:错误:不兼容的类型“countWords” HW3.c:21:3 的参数 1:警告:文件末尾没有换行符
  • 是的,我可以数行数
  • 我删除了每行之间的空格,因为从你的评论(我也删除了)我知道你不希望他们在那里。

标签: c word-count


【解决方案1】:

您在 c 中用于文件的类型是 FILE*。那颗星很重要,表明该类型是“指向文件的指针”。 countWords(FILE f) 不太可能是您要写的内容。

每次你调用你的函数时,它都会有一个新的count = 0,所以它总是会返回0或1。尝试使用static int count;,让count成为一个全局变量,或者将当前的count传递给函数。您的另一个选择是将return count; 行移到while 循环之外。

您可能还需要使用您发布的格式将计数除以 2 以获得字数。

【讨论】:

  • 为什么 OP 需要将计数除以二?
  • 哎呀。 return 语句应该在 while 循环之外。该函数只计算文件中新行语句的数量。主函数中有一个不同的计数变量。
  • @Chris Lutz:当我写的时候,OP 发布的格式是“word1\n\nword2\n\n...”
  • @Borealid - 我记得,但它也说(我检查了修订历史)“(单词之间没有多余的线,我是新手)”。
【解决方案2】:

应该是int countWords(FILE *f){,加上*return 语句应该只在最后一个 } 之前,在循环之外。

【讨论】:

  • 好的,但除此之外。还有其他看起来可能致命的东西吗?
  • 这个函数看起来还不错。其余的我不知道,对我来说似乎没有很好的说明。
【解决方案3】:

这里是代码。只需读取空格数,即可。

#include<stdio.h>
#define FILE_READ "file.txt"

    int main()

{
    FILE * filp;
    int count = 1;
    char c;
    filp = fopen(FILE_READ, "r");
    if(filp == NULL)
        printf("file not found\n");
    while((c = fgetc(filp)) != EOF) {
        if(c == ' ')
            count++;
    }
    printf("worrds = %d\n", count);
    return 0;
}

文本文件

I am megharaj, from india.

输出,

worrds = 5

【讨论】:

  • 知道如何计算 txt 文件中的行数吗??
  • if(c == ' ') 替换为 if(c == '\n')
  • @Megharaj 如果文件只包含空格,此程序会将它们视为单词,但这是错误的。
【解决方案4】:

这是我的 uni 书中的代码

#include <stdio.h>

int main(void){

  FILE *f = fopen("file.txt", "r");
  int count = 0, word=0;
  char ch;

  while ((ch = fgetc(f)) != EOF){
    if (ch == ' ' || ch == '\n') {
      word = 0;
      } else {
        if(!word){
          count++;
          word = 1;
        }
      }
   }

  printf("%d", count);
  return 0;
}

【讨论】:

  • 请不要发布仅代码的答案,除了解释使用代码
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多