在这个程序中,一个单词由任何不包含a的字符序列定义 " - " , " " , " \ n" , ":" 或 " \吨"
所以" howdy-hi:slig" 将是这个节目中的三个单词。
while ((iochar = getchar()) != EOF) {
if (iochar == '\n') {
line++;
word++;
}
if (iochar == ':' || iochar == '-' || iochar == '\t' || iochar == ' ') {
word++;
}
每次遇到空白时,我都知道我需要跳过所有可以分隔两个单词的额外空白字符,而不是递增单词, 所以"你好 - 我的名字是伯爵。" 计算5个单词而不是8个单词。
谢谢,我很感激。
答案 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是最后读取的字符):
最后一个案例是有趣的。如果你读了一个分隔符然后你读了一个字母,这意味着你开始解析一个新单词,所以你应该增加字数。你需要考虑程序的初始状态(最后有什么价值?)。