找不到最常见的词

时间:2013-12-23 16:58:54

标签: c

嘿,这是我在这里发表的第一篇文章。我被分配了一个练习来计算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,他们只是为了让它看起来更好。我还想指出这个版本用于整数而不是字符串只是为了开始。 我目前正在尝试线性搜索,但我不确定它是否会有所帮助

2 个答案:

答案 0 :(得分:2)

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

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

  • 阅读下一个号码;
  • 如果您已经拥有该号码的计数器,则可以为该号码添加一个计数器;
  • 如果您之前没有看过该号码,则为其创建一个计数器,并将其计数设置为一个。
  • 当读取所有数字时,您搜索一组标签,寻找具有最大计数的标签。
    • 记录第一个条目的编号和数量。
    • 每个后续条目:
    • 如果计数大于当前最大值,请记录新的最大计数和条目。
  • 打印有关最大计数和计数的数字的信息。

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

您可以轻松计算不同单词的数量或单词总数。请注意,您不需要存储所有单词;你只需要存储不同的单词。名单前面的计数是计算机科学教育误入歧途;你不需要计数使它工作(但你可能不得不忍受它在数据中;最简单的是忽略输入的第一行,因为它根本没有帮助)。下一个最简单的事情是要注意,除非它们对你不利,否则最大数量的不同单词将是指定的数字,因此你可以一举预先分配你需要的所有空间。

答案 1 :(得分:0)

很简单。将您的单词存储在2D数组中,循环通过它,每次从当前索引开始再次循环通过它并检查是否存在相等的单词。子循环结束的时间检查出现次数是否大于最后一次最大值。

#include <stdio.h>

int main()
{
    int i, j, occurrence=0, maximum = 0;
    char *index_max = NULL;
    char wl[10][10] = {"hello","world","goodbye","world","thanks","for","all","hello","the","world"};

    for (i=0; i<10; i++){
        occurrence = 0;
        for (j=i; j<10; j++){
            if (!strcmp(*(wl+i), *(wl+j))){
                occurrence++;
            }
        }
        if (occurrence>maximum){
            maximum = occurrence;
            index_max = *(wl+i);
        }
    }
    if (index_max != NULL){
        printf("The most frequent word is \"%s\" with %d occurrences.\n", index_max, maximum);
    }

    return 0;
}