【发布时间】:2015-02-04 20:07:51
【问题描述】:
假设我有两个数组:
char **words = (char**) malloc(MAX * sizeof(char*));
int *count = malloc(MAX * sizeof(int));
第一个将单词存储在给定列表中:
words[0] = "myword0" / words[1] = "myword1" / words[2] = "myword3" ...
第二个存储列表中每个单词的出现次数:
count[0] = 4 //means that "myword0" appears 4 times in the list
我想打印最常见的单词及其出现次数。 如果有出现相同次数的单词,按字母顺序打印第一个。
为此,我考虑按字母顺序对单词进行排序:
int sortWordsAlph(const void* a, const void* b)
{
char **x = (char**)a;
char **y = (char**)b;
return (strcmp(*x,*y));
}
在int main():
qsort(words, MAX, sizeof(char*), sortWordsAlph);
现在,问题在于 count。它仍然应该指向每个单词的出现,这意味着我也必须对其进行排序。我怎样才能做到这一点?
也许我应该使用交换算法而不是 qsort?
【问题讨论】:
-
如果您使用的是库 qsort,您似乎必须对结合了单词指针和计数的结构数组进行排序。如果您使用自己的自定义 qsort,则可以同时交换两个数组元素。
-
这可以通过另一个表(数组)来解决,其中包含其他表的索引。然后你可以将它传递给排序函数,并使用索引来查找实际的字符串和计数。
-
也可以通过多次排序完成;一次按频率排序,然后多次按字母顺序对频率相同的单词进行排序。
-
@500-InternalServerError - 所以,每当我交换 words 的 i,j 元素时,我应该交换 count 的相同 i,j 元素,对吗?
-
是的,我就是这个意思。
标签: c arrays string sorting char