我正在实现一个将所有字谜打印在一起的代码。现在我被困住了,我不知道如何前进。
我想做的是:
给定数组str[]={"cat","dog","tac",god"}
我创建了一个与dup[]
相同的数组str[]
。
现在我将重复的数组排序,现在变为{"act ","dgo","act","dgo"}
这里我找到相同元素的索引,即0和2&& 1和3
在原始数组中,我将索引0和2一起打印,1和3一起打印,
现在我不知道如何在不改变索引的情况下对字符串进行排序。
答案 0 :(得分:1)
这里最简单的方法是计算每个单词的散列并将其存储在辅助数组中。之后,遍历辅助数组并显示具有相同值的项目。例如
int i=0;
char hash[i][256];
for (i=0; i<n; i++) {
hash[i] = calculate_hash(str[i]);
}
int j=0;
for (i=0;i<n; i++) {
for (j=i+1; j<n; j++) {
if (strcmp(hash[i], hash[j] == 0) {
printf ("%s %s", str[i], str[j]);
}
}
}
我的C有点生疏,但我认为它掩盖了这个想法。
答案 1 :(得分:0)
你已经到了一半:在对字符 strings 中的字符进行排序后,再次按照常规方式对该列表进行排序 - 按字母顺序排序。然后所有字谜按顺序显示:"act","act","dgo","dgo"
。但是,通过这种方式,您将失去与原始阵列的连接。
不是将单词存储到单个char数组中,而是创建一个简单的结构。在此您还可以添加原始索引,因此在排序后您可以检索它们。