目标基本上是重新创建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;
}
答案 0 :(得分:1)
通常使用布尔变量,通常命名为in_word
,如果当前字符是空格,则设置为false
,如果是true
则设置为true
不。您在(仅当)从false
更改为{{1}}时(或反之亦然)增加字数。
答案 1 :(得分:0)
将您的代码实现为具有两种状态:in-a-word和not-in-a-word。然后在状态之间转换时递增计数。
我建议在从非单词转换为单词(相对于单词到非单词)时递增字数,因此不需要特殊处理在文件的末尾。