使用用户输入和缓冲区80来操作C中的字符串

时间:2016-11-08 21:11:52

标签: c

我正在尝试找到字符中的单词长度和字符串中这些单词的出现次数,输入是我从用户那里得到的。我还要找到这个词的平均长度。我必须打印这样的东西:

5 character word occurred 5 times
9 character word occurred 2 times
average length of the word is 5.6

到目前为止,我有这个,我只是无法弄清楚事件和字母。平均工作正常。

int ch;
int numWords = 0;
int numLetters = 0;
bool prevWasASpace = true; //spaces at beginning are ignored

printf("Enter a sentence: ");
while ((ch = getchar()) != EOF && ch != '\n')

{
    if (ch == ' ')
        prevWasASpace = true;
    else
    {
        if (prevWasASpace)
            numWords++;
        prevWasASpace = false;
        numLetters++;
    }
}

if (numWords > 0)
{
    double avg = numLetters / (float)(numWords);
    printf("Average word length: %.1f (C = %d, N = %d)\n", avg, numLetters, numWords);
}
else
    printf("You didn't enter any words\n");

return 0;

最后一个问题,我如何输入4000个字符的输入但一次只能输入80个?所以如果我输入一个大字符串,它一次只能为80个字符执行此操作,但会一起运行统计信息

1 个答案:

答案 0 :(得分:0)

您需要一种方法来存储/保存每个长度的单词数。一个(有些粗略但可行)的方法是使用一组int,其中数组索引表示单词中有多少个字母(1个字母的单词计数进入索引[0],2个字母的单词计入索引[1]等)这种方法的问题是你必须选择一个最大字长,这就是你的数组的长度。但由于您计划最多只接受80个字符,这可能是您的最大字长,因此您可以声明您的数组长度为80。

要限制输入的80个字符,只需在读取时计算字符数,然后在达到80时跳出循环.HHT。

(注意:如果您的程序在上述内容之后继续执行其他操作,并且其他内容包括其他输入,则您必须处理超出80个字符的输入,而您将丢弃。 "但由于这似乎不是你的任务的一部分,你可以逃避"草率"并忽略那些输入并在完成后退出程序。)