用C处理字符串用户输入和bufferzise为80

问题描述:

我试图找到字符的字长和字符串中出现的字符的数量输入我从用户那里得到它。我也必须找到这个词的平均长度。我必须打印这样的东西:用C处理字符串用户输入和bufferzise为80

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个字符做到这一点,但将运行统计全部在一起。

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

要限制80个字符的输入,只需在读取字符时对其进行计数,当你打到80时就会跳出循环。HTH。 (注意:如果你的程序继续完成上面所描述的其他事情,而其他东西包括额外的输入,那么你将不得不处理超过80个字符的输入,而这些输入会被“扔掉”。因为这看起来不是你的任务的一部分,所以你可以避开“sl”“,忽略那个输入并在完成时退出程序)。

+0

我不知道该怎么做的事情是如何计算每个单词中的字符。我知道如何计算整个字符串而不是每个单词,这就是阻止我完成这个任务的原因。 – G10

+0

一个简单的解决方案是为字母保留两个计数器,一个保留总数(如现在一样),另一个计数器在每次遇到新单词时重置为零。 –