【发布时间】:2018-11-02 20:46:36
【问题描述】:
我有一个结构数组,我可以在其中跟踪每个唯一单词在给定文本中出现的次数:
struct List {
char word[20];
int repeat;
};
现在我需要对此进行排序:
as 6
a 1
appetite 1
angry 1
are 2
and 4
...
到这里:
a 1
as 6
and 4
are 2
angry 1
appetite 1
...
(按字母顺序,我的意思是只按第一个字母) 到目前为止,我想出了这个:
for (i = 0; i < length - 1; i++) {
min_pos = i;
for (j = i + 1; j < length; j++) // find min
if (array[j].word[0] < array[min_pos].word[0]) {
min_pos = j;
}
swap = array[min_pos]; // swap
array[min_pos] = array[i];
array[i] = swap;
}
这段代码非常适合按字母顺序排序,但我无法编写正确的代码来按字母顺序和长度排序。
【问题讨论】:
-
使用
std::string会更容易。您可以使用std::map<std::string, int>将单词与频率相关联。排序将为您处理。std::string的自然排序是按字母,然后是长度,例如`"aa" 在 "ba" 之前。 -
这里不清楚
swap_pos的目的是什么。应该是min_pos? -
是的,忘记改回来了。
-
第二个
for- 它的左大括号在哪里?第一个for右括号在哪里?
标签: c++ arrays sorting data-structures char