在C中计算单词程序省略双空格和标点符号

时间:2017-03-03 10:30:25

标签: c

我正在学习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();
}

2 个答案:

答案 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;
  }
}