将代码从C ++转换为C:`a + b> b + a`其中a和b是`string`

时间:2016-08-29 16:35:59

标签: c++ c

有谁知道如何将此行从C ++转换为C编程语言? 我用C ++编写了这段代码,我想用C语言转换它。

bool compare(string a, string b)
{
return a+b > b+a;
}

它是qsort中的比较函数

我希望通过" a + b>进行比较B + A"解决该问题:例如,如果有4个整数为123,124,56,90,则可以制作以下整数" 1231245690,1241235690,5612312490,9012312456,9056124123"事实上,可以制作24个这样的整数。但有一点可以肯定9056124123是可以制作的最大可能整数。

2 个答案:

答案 0 :(得分:2)

这将完成你期望的,没有任何连接:

int compare(char *a, char *b)
{
    char *p1, *p2;
    int i, len = strlen(a) + strlen(b);

    p1 = a;
    p2 = b;
    for (i=0;i<len;i++) {
        if (*p1 > *p2) {
            return 1;
        } else if (*p1 < *p2) {
            return -1;
        }
        p1++;
        p2++;
        if (!*p1) {
            p1 = b;
        }
        if (!*p2) {
            p2 = a;
        }
    }
    return 0;
}

指针p1p2分别从ab的开头开始,逐个字符地比较,如果没有,则每个指针都会递增区别。当任一指针遇到空字节时,它会被重新分配给另一个变量的开头以从那里继续。

我们首先得到两个字符串的组合长度并多次遍历循环。

将两个数字的十进制表示作为字符串处理实际上比将它们作为整数处理更简单,因为后者将涉及确定小数位数并相应地相乘。此方法也不受您可能使用的任何整数类型的边界的约束。

答案 1 :(得分:1)

如果您需要没有任何额外分配的代码,可以尝试:

#include <string.h>
int compare(const char* a, const char* b)
{
  int a_len = strlen(a), b_len = strlen(b);
  int min_len = (a_len < b_len) ? a_len : b_len;
  int result = strncmp(a, b, min_len);
  if (result != 0)
     return result;
  if (a_len == b_len)
    return 0;
  if (a_len < b_len)
    result = strncmp(b, b+a_len, b_len-a_len);
  else
    result = strncmp(a+b_len, a, a_len-b_len);
  if (result != 0)
     return result;
  if (a_len < b_len)
    result = strncmp(b+(b_len-a_len), a, a_len);
  else
    result = strncmp(b, a+(a_len-b_len), b_len);
  return result;
}

最多进行3次字符串比较。返回值遵循strncmp的定义。