c - 使用 C 中的条件按字典顺序对 3 个字符串进行排序

标签 c sorting strcmp strcpy lexicographic

我无法从逻辑上全神贯注地做这件事。我已经列出了所有排序的可能性,并以此为基础制定了我的算法。

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 来解决。

如果您进行这两项更改,您应该会得到一些有效的东西。如果需要,首先将 str1str2 交换,然后在需要时交换 str1str3,这样可以确保最小的值最终位于 str1 中,并且仅两个较高的值保留在 str2str3 中(顺序未知)。然后,如果需要,通过将 str2str3 交换,您可以确保这两者的顺序也正确,因此整个事情必须按顺序进行。

关于c - 使用 C 中的条件按字典顺序对 3 个字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46480668/

相关文章:

c - 编译器在函数名前添加下划线前缀的原因是什么?

c - RPC数据传递

java - TreeMap 之后的排序技术?

c - 可加载的 Bash 内置

C - 如何使用函数 strcmp() 比较扩展字符序列?

C 编程 - 结构、指针和初始化

c - scanf 中的右对齐宽度修饰符?

algorithm - 图序列化

c - 如何修复 C 中未定义的 'undefined reference to ****** collect2.exe: error: ld returned 1 exit status'

c - 使用 strcmp() 插入函数