计算输入行中的单词数。单词只是一致性,第一个字符只是字母

时间:2018-08-22 07:56:47

标签: c count

确切的公式: 编写一个程序,计算输入行中的单词数。用词表示一致性,第一个字符必须是字母。

输入和输出示例:

输入:one 2two three 输出:2

输入:one two three four five 6six 输出:5

输入:789878moer and more 输出:2

输入:something like 8this输出:2

程序:

#include <stdio.h>
#define YES 1
#define NO 0

int main() {                   
    int c, nw, inword, first_char;  
    inword = first_char = NO;  
    nw = 0;                    

    while((c = getchar()) != EOF) { 
        if (c == ' ' || c == '\n' || c == '\t') {
            inword = first_char = NO;
        } else if (inword == NO && first_char == NO) {
            if ((65 < c && c < 90) || (97 < c && c < 122)) { 
                ++nw;          
                inword = YES;  
            } else {           
                first_char = YES;               
            }                  
        }
    }

    printf("%d\n", nw);
}

答案:

  1. 这是正确的解决方案吗?
  2. 是否可以以更优雅的方式决定这项任务?如果是,怎么办?

1 个答案:

答案 0 :(得分:1)

  

这是正确的解决方案吗?

我测试了一些案例,对我来说似乎还可以。

  

是否可以以更优雅的方式决定这项任务?如果是,怎么办?

以下行

if((65 < c && c < 90) || (97 < c && c < 122)) 

使用幻数和ASCII值检查c是否为字母。

您可以改为使用isalpha()头文件中定义的库函数<ctype.h>,使上一行变为:

if (isalpha(c))