Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我没有得到所需的输出_C - Fatal编程技术网

C 我没有得到所需的输出

C 我没有得到所需的输出,c,C,这个程序的输出是得到一个句子中的单词数,而不考虑问题中提到的空格或任何符号的数量 问题是: 将给出一行英文文本,其中单词之间用一隔开 在下列符号中: “'\t',”,“,”和“;” 每个单词可以用一个或多个字母与下一个和上一个单词分开 更多的下列符号。你得数一数字数 在句子中 请注意,要读取输入,必须一直读取,直到EOF符号消失 阅读,如下例所示 int main() { int c; c = getchar(); while ( c != EOF ) {

这个程序的输出是得到一个句子中的单词数,而不考虑问题中提到的空格或任何符号的数量

问题是:

将给出一行英文文本,其中单词之间用一隔开 在下列符号中:

“'\t',”,“,”和“;”

每个单词可以用一个或多个字母与下一个和上一个单词分开 更多的下列符号。你得数一数字数 在句子中

请注意,要读取输入,必须一直读取,直到EOF符号消失 阅读,如下例所示

int main()
{
    int c;

    c = getchar();
    while ( c != EOF ) {
       c = getchar();
    }
    return 0;
}
注意:不使用数组也可以解决此问题,因此 线路的最大长度并不重要

输入 由一个或多个单词隔开的一行英文文本 符号的更多出现

“'\t',”,“,”和“;”

输出 行中的字数

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


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

这是四个元素的简单应用

虽然 格查尔 转换 printf 以下代码显示了实现该功能的一种方法:

#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;
}
像这样

#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);
}

当您在字符之间交互时,它们在['''\t','.','和';']的集合中,或者不是。此外,您当前处于“单词中”或“不在单词中”,并且该状态可以通过正在检查的字符进行更改。如果状态变为“在一个单词中”,增加你的单词数。当然,你没有得到想要的输出,因为你的程序基本上什么都没有做。我投票将这个问题作为离题题来结束,因为OP没有做任何事情来满足作业的要求。无论如何,作业都很糟糕。我的意思是,我想立即用NUL终止符初始化一个包含“not in a word”字符的静态常量数组,这样就可以仔细检查以确定任何给定字符是否是单词的一部分:没有数组,这意味着一个case开关或if/else梯形图:@MartinJames就解决这个问题而言,如果问题中没有数组注释,我假设它说,为了阻止学生先将输入读入数组,然后再对其进行解析。我不认为它试图阻止学生使用数组来实现输入流解析逻辑。好答案:计算边缘是最好的主意,因为它使用可选的前导/尾随分隔符很好地处理第一个和最后一个单词。
#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;
}
[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);
}