我没有按要求获得所需的输出

时间:2017-08-29 15:10:07

标签: c

该程序的输出是获取句子中的单词数,而不考虑问题中提到的空格数或任何符号。

以下是问题:

将给出一行英文文本,其中单词以1分隔 以下符号:

' ',' \ t','。',','和';'

每个单词可以与下一个和前一个单词分开 更多以下符号。你必须计算单词的数量 在句子中。

请注意,要读取输入,您必须阅读,直到EOF符号为止 阅读,如下例所示。

int main()
{
    int c;

    c = getchar();
    while ( c != EOF ) {
       c = getchar();
    }
    return 0;
}

注意:没有数组就可以解决这个问题,所以 线的最大长度并不重要。

输入

一行英文文字,其中的单词彼此相隔一个或 更多出现的符号

' ',' \ t','。',','和';'

输出

该行中的字数。

样本输入

This is a sentence, it has words separated by spaces and fullstops.

样本输出

12

我知道我必须使用问题中给出的格式,但我不知道如何使用它。

我只知道当单词只用单个空格或单个\ t分隔时,查找句子中单词数的程序。但是,我没有任何想法来解决这个问题。

2 个答案:

答案 0 :(得分:1)

[one of delimiters]...[one of delimiters][not one of delimiters]... 
                                        ^^ count this edge.
像这样

#include <stdio.h>
#include <stdbool.h>

bool IsDelimiter(char ch, const char *delimiters){
    while(*delimiters)
        if(*delimiters++ == ch)
            return true;
    return false;
}

int main(void){
    bool prev_is_delmiter = true;
    int ch, wc = 0;

    while((ch = getchar()) != EOF && ch != '\n'){
        bool current_is_delmiter = IsDelimiter(ch, " \t,.;");
        if(prev_is_delmiter && !current_is_delmiter){
            ++wc;
        }
        prev_is_delmiter = current_is_delmiter;
    }
    printf("%d\n", wc);
}

答案 1 :(得分:0)

这是四个元素的简单应用。

  1. 而()
  2. 的getchar()
  3. 开关()
  4. printf()的
  5. 以下代码显示了实现该功能的一种方法:

    #include <stdio.h>  // getchar(), EOF, printf()
    
    int main( void )
    {
        int wordCount = 0;
        int ch;
        int inWord = 0;
    
        while( (ch = getchar()) != EOF )
        {
            switch( ch )
            {
                case ' ':
                case '\t':
                case '.':
                case ',':
                case ';':
                    inWord = 0;
                    break;
    
                default:
                    if ( !inWord )
                    {
                        wordCount++;
                        inWord = 1;
                    }
                    break;
            } // end switch
        } // end while
    
        printf( "\n%d\n", wordCount );
        return 0;
    }