文章目录

//把数组中数字拼接起来,并打印最小的和

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

// int型整数用十进制表示最多只有10位
const int g_MaxNumberLength=10;
char* g_StrCombine1=new char[g_MaxNumberLength*2+1];
char* g_StrCombine2=new char[g_MaxNumberLength*2+1];
// 如果[strNumber1][strNumber2] > [strNumber2][strNumber1], 返回值大于0
// 如果[strNumber1][strNumber2] = [strNumber2][strNumber1], 返回值等于0
// 如果[strNumber1][strNumber2] < [strNumber2][strNumber1], 返回值小于0
int compare(const void* strNumber1,const void* strNumber2){//比较mn   VS nm
    strcpy(g_StrCombine1,*(const char**)strNumber1);
    strcat(g_StrCombine1,*(const char**)strNumber2);

    strcpy(g_StrCombine2,*(const char**)strNumber2);
    strcat(g_StrCombine2,*(const char**)strNumber1);
    return strcmp(g_StrCombine1,g_StrCombine2);
}
void PrintMinNumber(int *numbers,int length){
    if(numbers==NULL||length<0)
        return ;
    char** strNumbers=(char**)(new int[length]);
    for(int i=0;i<length;i++){
        strNumbers[i]=new char[g_MaxNumberLength+1];
        sprintf(strNumbers[i],"%d",numbers[i]);
        //数值转换为字符串,比如numbers存储的是{3,32,321},那么//strNumber存储的是{"3","32","321"}
    }
    qsort(strNumbers,length,sizeof(char*),compare);//对字符串数组进行排序,由小到大
    for(int i=0;i<length;i++)
        printf("%s",strNumbers[i]);
    printf("\n");
    for(int i=0;i<length;i++)
        delete[] strNumbers[i];
    delete[] strNumbers;
}
int main()
{
    int a[]={3,32,321};
    PrintMinNumber(a,3);
    return 0;
}
文章目录