确切的公式: 编写一个程序,计算输入行中的单词数。用词表示一致性,第一个字符必须是字母。
输入和输出示例:
输入: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);
}
答案:
答案 0 :(得分:1)
这是正确的解决方案吗?
我测试了一些案例,对我来说似乎还可以。
是否可以以更优雅的方式决定这项任务?如果是,怎么办?
以下行
if((65 < c && c < 90) || (97 < c && c < 122))
使用幻数和ASCII值检查c
是否为字母。
您可以改为使用isalpha()
头文件中定义的库函数<ctype.h>
,使上一行变为:
if (isalpha(c))