0

我很难清楚地说明这个函数应该做什么,所以我想我会给你们举个例子。假设我的程序打开并扫描了一个文本文件,其中包含以下内容:

“猫追公鸡没有用。”

基本上我要写的函数应该打印出有多少个 1 字母单词(如果有的话),有多少 2 个字母单词,有多少 3 个字母单词,等等。

" 长度计数

     2    2
     3    3 
     5    2 
     6    1 
     7    1

"

这是我的尝试:

int word_length(FILE *fp, char file[80], int count)//count is how many total words there are; I already found this in main()
{
  printf("Length\n");
  int i = 0, j = 0;
  while(j < count)
  {
    for(i = 0; i < count; i++)
    {
      if(strlen(file[i] = i)
        printf("%d\n", i);
    }//I intended for the for loop to print the lengths
  ++i;
  printf("Count\n");
  while()//How do you print the counts in this case? 
  }
} 

我认为我设置循环的方式会导致相同长度的单词被打印两次......所以它看起来像这样,这是错误的。那么我应该如何设置循环呢?

“长度计数

     2    1
     2    2

"

4

2 回答 2

3

这听起来像是功课,所以我不会为你写代码,但会给你一些线索。

  1. 要保存多个值,您将需要数组。索引为i的元素将包含长度为i的单词的计数器。
  2. 找到一种方法来识别单词的边界(空格、句号、行首等)。然后计算边界之间的字符数。
  3. 增加相关计数器(见技巧 1)。重复。

一些细节。您实际上想将一件事映射到另一件事:单词长度到此类单词的数量。对于映射,有特殊的数据类型,通常称为哈希(表)或字典。但是在您的情况下,数组可以完美地用作地图,因为您的键是统一的并且继续(1,2 ...到某个最大字长)。

于 2013-02-21T00:27:19.757 回答
1

您不能使用单个 int 来计算所有这些。您需要一个数组,然后在它的位置 0 处跟踪有多少 1 个字母的单词,在位置 1 处累积 2 个字母的单词,依此类推。

于 2013-02-21T00:23:02.657 回答