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

Sorting 3 strings Lexicographically using conditionals in C

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

ABC

ACB

BAC

商业银行

出租车

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 块可以 运行,这意味着您可以通过四种可能的路径执行代码 — 第一个块 运行s,或第二块运行s,或第三块运行s,或其中的none 运行。但这不正确,因为您自己指出有六种情况需要考虑。

其次,您的顺序有点问题,可以通过交换您的第二块和第三块来解决。

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

您是否正在尝试使用字符串实现冒泡排序? Take a look here

下面是一段针对字符串执行此操作的小代码:

#include <stdio.h>
#include <string.h>

#define strSize 20
int main() {
  char strings[][strSize] = {"CBA", "CAB", "BCA", "BAC", "ACB", "ABC"};
  char tmp[strSize];
  size_t len = sizeof(strings)/sizeof(strings[0]);
  for (size_t j = 1; j < len; ++j) {
    for (size_t i = 1; i < len; ++i) {
      strcpy(tmp, strings[i - 1]);
      if (strcmp(strings[i], tmp) < 0) {
        strcpy(strings[i - 1], strings[i]);
        strcpy(strings[i], tmp);
      }
    }
  }

  for (size_t i = 0; i < len; ++i) {
    printf("%s ", strings[i]);
  }
}