嘿,这是我在这里的第一篇文章。我被分配了一个练习来计算 c 编程语言中最常用的单词。首先,我需要阅读一个数字,它告诉我我必须阅读多少个单词。然后我需要使用最大元素大小为 50 的 calloc。之后我读取了字符串。我最初的想法是创建一个一维数组,稍后我将按字母顺序对其进行排序,然后计算和打印最常用的单词会很容易。但经过几个小时的研究,我发现我需要使用二维数组,事情就失控了。我已经学习计算机科学 3 个月了,这个练习似乎很难。你还有其他建议吗?例子是这样的:

10
hello
world
goodbye
world
thanks
for
all
hello
the
fish

你好
到目前为止我的代码是
int main()
{
   int i, n, j, temp;
   int *a;

   printf("Eisagete to plhthos twn leksewn:");
   scanf("%d",&n);

   a = (int*)calloc(n,50);
   printf("Eisagete tis %d lekseis:\n",n);
   for( i=0 ; i < n ; i++ )
   {
      scanf("%d",&a[i]);
   }

  for (i = 0 ; i < ( n - 1 ); i++)
  {
    for (j = 0 ; j < n - i - 1; j++)
    {
      if (a[j] > a[j+1])
      {
        temp   = a[j];
        a[j]   = a[j+1];
        a[j+1] = temp;
      }
    }
  }

不要介意他们在希腊的 printfs,他们只是为了让它看起来更好。我还想指出这个版本用于整数而不是字符串,只是为了开始。
我目前正在尝试线性搜索,但我不确定它是否有帮助

最佳答案

正如您所指出的,您展示的代码与读取和排序整数有关;它只是与字数计算问题松散相关。

你会如何计算每个数字的出现次数?你必须

  • 读取下一个数字;
  • 如果您已经有了该号码的计数,则将该号码的计数加一;
  • 如果您以前从未见过该数字,则为其创建一个计数并将其计数设置为 1。
  • 读取完所有数字后,您搜索所有计数,寻找计数最大的那个。
  • 记录第一个条目的数量和计数。
  • 对于每个后续条目:
  • 如果计数大于当前最大值,则记录新的最大计数和条目。
  • 打印有关具有最大计数的数字以及该计数是多少的信息。

  • 用单词替换数字,大纲将非常相似。您可以分别为每个字符串(不同的词)分配存储空间。

    随时计算不同单词的数量或单词总数很容易。请注意,您不需要存储所有单词;您只需要存储不同的单词。排在前列的是计算机科学教育误入歧途;你不需要计数来让它工作(但你可能不得不忍受它在数据中;最简单的事情是忽略输入的第一行,因为它真的没有多大帮助)。下一个最简单的事情是要注意,除非他们向您撒谎,否则不同单词的最大数量将是指定的数量,因此您可以一举预先分配您需要的所有空间。

    关于找不到最常用的词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20747843/

    10-12 17:25