4、单词计数和单行显示
#include <stdio.h> #include <stdlib.h> #define out 0 #define in 1 int main() { int c; int n_w; //单词计数 int state; //输入状态,用于区分当前输入是否处于单词内 state = out; //初始状态为单词外 n_w = 0; while ((c = getchar()) != '\n') //按下enter键时,终止循环,输出结果 { if (c==' ' || c=='\t') //如果当前输入的是空格或者制表符,则是在单词外 { state = out; //输入状态置为单词外,此时不进行单词计数,也不输出空格或者制表符 } else if (state==out) //走到这里说明当前输入的不是空格或者制表符,暂时认为输入的是数字或字母,同时当前的输入状态又是外部 { //也就是说,当前的输入刚好是单词的第一个字符,这已经是一个新单词了 putchar('\n'); //所以要换行,然后显示这个字符,同时单词计数+1,输入状态更改为单词内 putchar(c); //当输入单词内的第二个字符时,状态已经是单词内了,所以不会再进入这个过程,而是跳转到下一个else state = in; ++n_w; } else //当前输入的既不是空格或制表符,输入状态也不是外部 putchar(c); //那就是说现在正在输入单词内的字符,不用计数,也不用换行,不用更改状态,只用显示出来即可 } printf("\n输入单词个数:%d\n", n_w); return 0; }