对数组C中的字符串进行排序

时间:2013-09-18 06:00:16

标签: c string algorithm sorting

我正在实现一个将所有字谜打印在一起的代码。现在我被困住了,我不知道如何前进。

我想做的是:

给定数组str[]={"cat","dog","tac",god"}

我创建了一个与dup[]相同的数组str[]

现在我将重复的数组排序,现在变为{"act ","dgo","act","dgo"}

这里我找到相同元素的索引,即0和2&& 1和3

在原始数组中,我将索引0和2一起打印,1和3一起打印,

现在我不知道如何在不改变索引的情况下对字符串进行排序。

2 个答案:

答案 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数组中,而是创建一个简单的结构。在此您还可以添加原始索引,因此在排序后您可以检索它们。