代码功能:
对文本流中的单词数,行数 以及字符数 进行统计并输出。
该问题难点主要是对于单词数的统计,若是进行硬性统计,其计数器只得在机器读入现有字符为空格且上一机器读入字符为字母时,方可加一。
但如果引入状态控制变量,当且仅当状态变量改变为特定状态时单词计数变量加一,则会使代码复杂度显著下降。
特定状态:由state OUT 变为 state IN
以下为K&R原书代码
#include <stdio.h>
#define IN 1
#define OUT 0
int main()
{
int nl, nw, nc, state, c;
nl = nw = nc = 0;
state = OUT;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
nl++;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
nw++;
state = IN;
}
}
printf("单词数:%d 行数:%d 字符数:%d", nw, nl, nc);
return 0;
}