c语言输入一段话如何输出行数字数词数?

Python016

c语言输入一段话如何输出行数字数词数?,第1张

算法很简单,行数用\n计数;字数应该是指字符数,就是字符串的长度;单词数用空格符,跳格符,换行符来分隔计算。

C语言统计控制台输入的行数,单词数与字符数:

#include <stdio.h>

#define IN 1 //在单词内

#define OUT 0 //在单词外

/**

*统计输入的行数,单词数与字符数

*/

int main() {

// c:每次读的支付,nl:行数,nw:单词数,nc:字符数,state:标示状态

int c, nl, nw, nc, state

state = OUT

nl = nw = nc = 0

while ((c = getchar()) != EOF) {

++nc

if (c == '\n') {

++nl

}

if (c == ' ' || c == '\n' || c == '\t') {

state = OUT

} else if (state == OUT) {

state = IN

++nw

}

}

printf("%d %d %d", nl, nw, nc)

return 0

}

看这程序定义了3个变量,nc,应该是new

char,也就是新字符的意思。nl

就是new

line,nw就是new

word。其实要想知道一个程序的原理就是带入。假设我们输入了

“an

apple\n”,不包括双引号。很明显这个程序是对字符串主题的每一个字符进行判断的。当c=‘a’的时候,首先++nc,因为这是一个字符;然后因为不是‘\n’,所以行数并不会增加,所以nl++不执行;同理下一句也不会执行。此时因为前两个if都不执行,故执行else,也就是说明当前字符是一个单词内的字母,所以将in置1,并且nw++;意思是目前读到的字母在一个单词内,所以如果下一个字符还是字母的话,就认为是同一个单词内的两个字母,单词数不增加。这样一直读到'an'后面的空格,state就变为out了,说明之前那个单词已经输入完了,现在在这个单词外面。意味着如果下一个字符是字母的话,就是另一个单词的开始,可以nw++。。接下来你应该能理解了吧。。