Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C++;对C:`a+;b>;b+;a`其中a和b是`字符串` 有人知道如何将这条线从C++转换成C语言吗? 我用C++编写了这个代码,我想在C.中转换它 bool compare(string a, string b) { return a+b > b+a; }_C++_C - Fatal编程技术网

从C++;对C:`a+;b>;b+;a`其中a和b是`字符串` 有人知道如何将这条线从C++转换成C语言吗? 我用C++编写了这个代码,我想在C.中转换它 bool compare(string a, string b) { return a+b > b+a; }

从C++;对C:`a+;b>;b+;a`其中a和b是`字符串` 有人知道如何将这条线从C++转换成C语言吗? 我用C++编写了这个代码,我想在C.中转换它 bool compare(string a, string b) { return a+b > b+a; },c++,c,C++,C,这是qsort中的比较函数 我想通过“a+b>b+a”来比较以解决这个问题:例如,如果有4个整数,如123、124、56、90,那么可以将下面的整数变成“1231245690、1241235690、5612312490、9012312456、9056124123”等等。事实上,可以得到24个这样的整数。但有一点是肯定的,即9056124123是可以生成的最大整数。如果您需要不需要任何额外分配的代码,您可以尝试: #include <string.h> int compare(cons

这是qsort中的比较函数


我想通过“a+b>b+a”来比较以解决这个问题:例如,如果有4个整数,如123、124、56、90,那么可以将下面的整数变成“1231245690、1241235690、5612312490、9012312456、9056124123”等等。事实上,可以得到24个这样的整数。但有一点是肯定的,即9056124123是可以生成的最大整数。

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

#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;
}
#包括
int比较(常量字符*a,常量字符*b)
{
int a_len=strlen(a),b_len=strlen(b);
int min_len=(a_len

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

这将实现您期望的功能,而无需任何连接:

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;
}
int比较(char*a,char*b)
{
字符*p1,*p2;
int i,len=strlen(a)+strlen(b);
p1=a;
p2=b;
对于(i=0;i*p2){
返回1;
}否则如果(*p1<*p2){
返回-1;
}
p1++;
p2++;
如果(!*p1){
p1=b;
}
如果(!*p2){
p2=a;
}
}
返回0;
}
指针
p1
p2
分别从
a
b
的开头开始,逐个字符进行比较,如果没有差异,则每个指针递增。当任一指针遇到空字节时,它将被重新分配到另一个变量的开头,以便从那里继续

我们首先得到两个字符串的组合长度,并在循环中运行多次


将两个数字作为字符串进行十进制表示实际上比将它们作为整数处理简单,因为后者需要确定十进制数字的数量并相应地相乘。此方法也不受您可能使用的任何整数类型的限制。

您尝试过什么吗?要确定所需的结果,实际上不需要连接字符串!比较完全可以基于子字符串比较运行。您可以使用循环逐字符手动比较它们,这将比构造新字符串更快。只要
a
点击
'\0'
,您就需要从
b
继续。顺便说一句,这样的比较公式(a+b+a)毫无意义。你甚至需要连接吗?如果一个字符串比另一个字符串小/相同/大,那么它们之间的相互连接也是如此。请注意,比较字符串与比较数字不同:
“124”>“1234”
。也许你应该把它们转换成数字。将代码从C++转换成C= =转换特斯拉到T型福特。为什么?