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