0

我试图得到字母数/单词数的答案......我在单词计数方面遇到了问题。

实际上在这里我只声明一个新词是如果有一个空格,制表符,换行符,但仍然不起作用..

这是我的功能:

int num_of_letters_words()
{
    int numberOfLetters = 0;
    int numberOfWords = 0;
    int userInput;
    int answer;
    printf("please enter your input:\n");
    while ((userInput = getchar()) != EOF)
    {
        if (ispunct(userInput))
            continue;

        else if(userInput == '\n')
            continue;

        else if (userInput == ' ')
            continue;

        else if (iscntrl(userInput))
            continue;

        else if (userInput == ' ')
            ;
        else
           numberOfLetters++;

        if (userInput == ' ' || userInput == '\n' || userInput == '\t')
            numberOfWords++;
    }
    answer = numberOfLetters/numberOfWords;
    return answer;
}

只有在函数的末尾你才能看到计数器……这里有什么问题?

4

1 回答 1

3

continue使您的循环继续下一次迭代,它会跳过它后面的内容。

假设“单词”将定义为一系列字母,后跟分隔符(空格、制表符等),那么您的循环可能如下所示:

while ((c = getchar()) != EOF)
{
    if (c == ' ' || c == '\t' || c == '\n' || etc.)
    {
        if (letterCountThisWord > 0)
            wordCount++;
        letterCountThisWord = 0;
        continue;
    }
    letterCount++;
    letterCountThisWord++;
}

if (letterCountThisWord > 0)
    wordCount++;

如果您不确定您的应用程序中发生了什么,有很多很棒的 IDE 提供了很好的调试工具。您可以逐步浏览您的代码,观察您的变量如何变化,并以这种方式真正理解您的代码。

还有一个建议:在你的桌子上放一些东西(瓶子、花等),想象这是你的教授或老板,并尝试详细解释他的代码是如何工作的。你会意识到你自己不知道你的代码的某些部分实际上做了什么/发生了什么,这将迫使你寻找答案(谷歌,书籍,......)。

祝你好运 :)

于 2013-02-02T02:54:21.553 回答