在C中写一个字数统计程序

时间:2015-02-20 02:23:26

标签: c whitespace getchar

在这个程序中,一个单词由任何不包含a的字符序列定义 " - " " " " \ n" ":" " \吨"

所以" howdy-hi:slig" 将是这个节目中的三个单词。

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

    if (iochar == '\n') {
        line++;
        word++;
    }

    if (iochar == ':' || iochar == '-' || iochar == '\t' || iochar == ' ') {
        word++;
    } 

每次遇到空白时,我都知道我需要跳过所有可以分隔两个单词的额外空白字符,而不是递增单词, 所以"你好 - 我的名字是伯爵。" 计算5个单词而不是8个单词。

谢谢,我很感激。

2 个答案:

答案 0 :(得分:1)

#include<stdio.h>
#include<conio.h>
int main()
{
     int c,count=0,prev=' ';
     while((c=getchar())!=EOF)
     {
           if((prev==' '||prev=='\n'||prev=='\t')&&(c>='a'&&c<='z')||(c>='A'&&c<='Z'))
         count++;
        prev=c;
     }
     printf("%d",count);
}

答案 1 :(得分:0)

您的程序就像一个finite state machine:它有一个状态并读取一个确定要执行的操作的输入。为了简化操作,请考虑以下情况(假设current是当前字符,last是最后读取的字符):

  • current = letter and last = letter =&gt;什么都不做
  • current = separator and last = letter =&gt;什么都不做
  • current = separator and last = separator =&gt;什么都不做
  • current = letter和last = separator

最后一个案例是有趣的。如果你读了一个分隔符然后你读了一个字母,这意味着你开始解析一个新单词,所以你应该增加字数。你需要考虑程序的初始状态(最后有什么价值?)。