假设文本文件有多个空格,如何计算文档中的单词

时间:2015-02-26 01:11:44

标签: c

目标基本上是重新创建wc。我需要计算单词,字符,非空白字符和新行。除了能说明如何使其发挥作用的文字之外,我拥有一切。

当我在这里搜索时,每个人都假设文档之间没有多个空格。我必须测试的文件保证有多个空格,所以这种计算单词的方法不起作用。

#include <stdio.h>

int main (int argc, char* argv[]) {
  int Spaces;
  Spaces = 0;
  int NewLine;
  NewLine = 0;
  int Characters;
  Characters = -1;
  char* filename = argv[1];

  if (argc < 2) {
    printf("Usage: \n   wc <filename>\n");
  } else {
    printf("Filename is: %s\n", filename );
    FILE* infile;
    infile = fopen(filename, "r");

    char c;
    do {
      if (c == ' ') {
        Spaces = Spaces + 1;
      }
      if (c == '\n') {
        NewLine = NewLine + 1;
      }
      Characters = Characters + 1;
    } while ((c = fgetc(infile)) != EOF);

    printf("Total number of characters: %d\n", Characters);
    Characters = Characters - NewLine - Spaces;
    printf("Total number of non-whitespace characters: %d\n", Characters);
    printf("Total number of lines: %d\n", NewLine);
  }
  return 0; 
}

2 个答案:

答案 0 :(得分:1)

通常使用布尔变量,通常命名为in_word,如果当前字符是空格,则设置为false,如果是true则设置为true不。您在(仅当)从false更改为{{1}}时(或反之亦然)增加字数。

答案 1 :(得分:0)

将您的代码实现为具有两种状态:in-a-word和not-in-a-word。然后在状态之间转换时递增计数。

我建议在从非单词转换为单词(相对于单词到非单词)时递增字数,因此不需要特殊处理在文件的末尾。