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

标签 c count

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

输入和输出示例:

输入:一2二三 输出:2

输入:一二三四五六六 输出:5

输入:789878moer 及更多 输出:2

输入:类似于 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. 是否可以以更优雅的方式决定这项任务?如果是,如何?

最佳答案

Is it correct solution?

我测试了一些案例,对我来说似乎没问题。

Is it possible to decide this task in more elegant way? If yes, How?

下面一行

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

使用魔数(Magic Number)和 ASCII 值来检查是否 c是一个字母表。

您可以使用库函数 isalpha()定义于 <ctype.h>头文件,使上面的行变成:

if (isalpha(c)) 

关于计算输入行中的单词数。其中单词只是一致性,第一个字符只是字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962235/

相关文章:

c - 在 C 中确定文件是否正在 Windows 上被删除

c - 在c中使用参数作为输出

c - 使用命名管道进行进程间通信的通知

c - 如何在 ubuntu 中使用 bochs?

join - Apache Solr - 作为 super 查询参数的子查询计数

c# - 如何访问 Perfmon 信息?

python - 使用计数器从 csv 读取和绘图

mysql - 帮助进行左连接计数

sql-server - sp_executesql 不使用索引?

c - C中没有类型的参数