-1

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

我想做的是:

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

我创建了一个dup[]str[].

现在我对现在变成的重复数组进行排序{"act ","dgo","act","dgo"}

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

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

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

4

2 回答 2

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 有点生疏,但我认为它掩盖了这个想法。

于 2013-09-18T06:14:29.027 回答
0

您已经完成了一半:在对字符串中的字符进行排序之后,您再次以“常规方式”对这个列表进行排序——按字母顺序。然后所有字谜按顺序出现:"act","act","dgo","dgo"。但是,通过这种排序,您会失去与原始数组的连接。

与其将单词存储到单个 char 数组中,不如创建一个简单的结构。在此您还添加了原始索引,因此在排序后您可以检索它们。

于 2013-09-18T06:41:55.883 回答