计算C中的句子数

时间:2016-08-03 17:14:32

标签: c

这个简单的代码计算通过检查期间,问号或感叹号输入的句子数。但是,如果我输入" ",它不计算空格后的句子。 我该如何解决这个问题?

int numberSentence(char ch[])
{
    int count=0, i=0;
    while(ch[i] != '\0')
    {
        if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!')
            count++;
        i++;
    }

    return count;
}


int main()
{
    char ch[999];
    printf("Enter sentences:\n");
    scanf("%s", ch);
    printf("Number of sentences is %d", numberSentence(ch));

}

4 个答案:

答案 0 :(得分:2)

你的问题在于:

scanf("%s", ch)

scanf with“%s”将查找,直到找到一个空格,然后将该字符串存储到指针ch中。

在这种情况下,我建议使用:

scanf("%c", ch)

它将逐个字符地扫描。您需要稍微改造程序。

请注意,scanf()将返回一个表示其读取宽度的整数。 因此:

while(scanf("%c", ch) == 1)
   if (ch == ...)
}

供您参考: http://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm

答案 1 :(得分:1)

如果用空白表示换行符号,请尝试:

if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!' || ch[i] == '\n')
        count++;

但为什么不使用gets()呢?

while(gets(ch)!=NULL)
{
    count++;
}

答案 2 :(得分:0)

对于这个简单的问题,您可以使用 scanset 转换说明符scanf()将您的输入拆分为句子分隔符。

#include <stdio.h>

int main(void) {
    int count = 0;
    char buf[1000];
    while (scanf("%999[^.!?]%*c", buf) == 1) ++count;
    printf("sentences: %d\n", count);
    return 0;
}

%[^.!?]会将所有数据扫描到句号,感叹号或问号。 %*c将扫描标点符号而不存储它(*表示没有存储扫描输入的参数。)

答案 3 :(得分:0)

#include <stdio.h>

int numberSentence(char ch[]){
    int count=0, i;
    char last = ' ';

    for(i = 0; ch[i]; ++i){
        if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!'){
            count++;
            last = ' ';
        } else if(ch[i] == ' ' || ch[i] == '\t' || ch[i] == '\n'){
            continue;//white-space does't include to sentence of top.
        } else {
            last = ch[i];//check for Not terminated with ".?!"
        }
    }

    return count + (last != ' ');//+ (last != ' ') : +1 if Not terminated with ".?!"
}


int main(void){
    char ch[1000];

    printf("Enter sentences:\n");
    scanf("%999[^\n]", ch);//input upto newline
    printf("Number of sentences is %d", numberSentence(ch));
}