我正在学习C编程的基础课程,我已经完成了创建一个计算句子中单词数量的程序的任务,我已经实现了这一点,但是我有一个第二个任务是阻止程序计算标点符号,除此之外,如果我输入一个连续的空格,我需要程序忽略它,我不知道如何绕过它。任何人都可以指出我正确的方向,我不是在寻找任何人为我编写代码。
这是我的代码:
#include <stdio.h>
int main()
{
const char end = '.';
int words = 1;
printf("please enter a sentence: \n");
char c = getchar();
while (c != end)
{
c = getchar();
if (c == ' ')
words++;
}
printf("the total number of words is %d", words);
getchar();
getchar();
}
答案 0 :(得分:0)
使用您提供的代码(即通过查找分隔空格来计算单词),您可以通过记住忽略后续空格的最后一个字符来解决多空格问题
while (c != end)
{
c = getchar();
if (c == ' ' && previous_c != ' ')
words++;
previous_c = c;
}
请注意,如果用户以单个空格开始输入,则程序仍会将此计为一个单词。为防止出现这种情况,您应该将previous_c
初始化为某个已知值(例如0
)并检查此情况。这意味着if
条件将变为(c == ' ' && (previous_c != ' ' || previous_c == 0))
正如Cool Guy评论的那样,你所展示的程序已经忽略了标点符号。
作为另一项改进,我建议您使用do...while
循环代替while
循环来减少需要调用的地方getchar()
答案 1 :(得分:0)
我会把它分成两个循环。一个用于跳过所有非单词字符,另一个用于跳过单词字符。在这些循环之间开始一个单词并将被计算。
#include <stdio.h>
int main()
{
char c;
int words = 0;
printf("please enter a sentence: \n");
for(;;) {
while((c=getchar())!=EOF && !isalpha(c));
if(c==EOF) break;
words++;
while((c=getchar())!=EOF && isalpha(c));
if(c==EOF) break;
}
}