嘿,这是我在这里的第一篇文章。我被分配了一个练习来计算 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,他们只是为了让它看起来更好。我还想指出这个版本用于整数而不是字符串,只是为了开始。
我目前正在尝试线性搜索,但我不确定它是否有帮助
最佳答案
正如您所指出的,您展示的代码与读取和排序整数有关;它只是与字数计算问题松散相关。
你会如何计算每个数字的出现次数?你必须
用单词替换数字,大纲将非常相似。您可以分别为每个字符串(不同的词)分配存储空间。
随时计算不同单词的数量或单词总数很容易。请注意,您不需要存储所有单词;您只需要存储不同的单词。排在前列的是计算机科学教育误入歧途;你不需要计数来让它工作(但你可能不得不忍受它在数据中;最简单的事情是忽略输入的第一行,因为它真的没有多大帮助)。下一个最简单的事情是要注意,除非他们向您撒谎,否则不同单词的最大数量将是指定的数量,因此您可以一举预先分配您需要的所有空间。
关于找不到最常用的词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20747843/