我无法从逻辑上全神贯注地做这件事。我已经列出了所有排序的可能性,并以此为基础制定了我的算法。
ABC
ACB
BAC
BCA
CAB
CBA
3 个字符串只有 6 种可能的组合,因此,我认为这是使用条件对其进行硬编码的非常快速且简单的解决方案。查看代码;
char str1[x]; // where x is some constant value
char str2[x];
char str3[x];
char temp[x];
if (strcmp(str1, str2) > 0)
{
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
}
else if (strcmp(str2, str3) > 0)
{
strcpy(temp, str2);
strcpy(str2, str3);
strcpy(str3, temp);
}
else if (strcmp(str1, str3) > 0)
{
strcpy(temp, str1);
strcpy(str1, str3);
strcpy(str3, temp);
}
本质上,我想以 ABC 的任何变体为例,并将其排序为 ABC。即 BAC -> ABC,CAB -> ABC。
最佳答案
你们很接近。你最大的问题是那些else
。通过使用 else if
,您可以确保最多有一个 if
block 可以运行,这意味着您可以通过代码采用四种可能的路径 - 第一种 block 运行,或者第二个 block 运行,或者第三个 block 运行,或者它们都不运行。但这不可能是正确的,因为您自己指出有六种情况需要考虑。
其次,您有一个轻微的排序问题,可以通过交换第二个和第三个 block 来解决。
如果您进行这两项更改,您应该会得到一些有效的东西。如果需要,首先将 str1
与 str2
交换,然后在需要时交换 str1
和 str3
,这样可以确保最小的值最终位于 str1
中,并且仅两个较高的值保留在 str2
和 str3
中(顺序未知)。然后,如果需要,通过将 str2
与 str3
交换,您可以确保这两者的顺序也正确,因此整个事情必须按顺序进行。
关于c - 使用 C 中的条件按字典顺序对 3 个字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46480668/