如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
/*
其实这就是个字符串的冒泡排序,如果字符串A+B>B+A那么认为A>B
以此为准则,采用冒泡排序的方法将字符串按大小排序,然后输出就可以了
*/
#include<stdlib.h>//system("pause");的头文件
#include<string.h>//strcpy strcat strcmp加.h
#include<stdio.h>//scanf("%d",&num);的头文件
int main(){
int i,j;
int num=0;
char data[100][5]={'\0'};
char tempa[7]={'\0'},tempb[7]={'\0'},temp[5]={'\0'};
scanf("%d",&num);
for(i=0;i<num;i++){
scanf("%s",data[i]);
}
strcpy(temp,data[0]);//按长度的字符串拷贝
for(i=0;i<num;i++){
for(j=i+1;j<num;j++){
strcpy(tempa,data[i]);
strcat(tempa,data[j]);//字符串连接
strcpy(tempb,data[j]);
strcat(tempb,data[i]);
if(strcmp(tempa,tempb)<0){
//字符串比较 ①字符串1小于字符串2,strcmp函数返回一个负值;
strcpy(temp,data[j]);
strcpy(data[j],data[i]);
strcpy(data[i],temp);
}
}
printf("%s",data[i]);//连续输出data[i] 不换行不加空格
}
system("pause");
return 0;
}
附加:假设num=4 7 13 4 246
步骤1:比较0和1,0和2,0和3 调整0和1 2 3的顺序
结果:7 13 4 246
步骤2:比较1和2,1和3 调整1和2 3 的顺序
结果:7 4 13 246
步骤3:比较2和3 调整2和3的顺序
结果:7 4 246 13
方法2:
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,num=0;
char data[100][5]={'\0'},tempa[7]={'\0'},tempb[7]={'\0'},temp[5]={'\0'};
cin>>num;
for(i=0;i<num;i++)cin>>data[i];
// strcpy(temp,data[0]);//按长度的字符串拷贝
for(i=0;i<num;i++){
for(j=i+1;j<num;j++){
strcpy(tempa,data[i]);
strcat(tempa,data[j]);//字符串连接
strcpy(tempb,data[j]);
strcat(tempb,data[i]);
//cout<<"tempa:"<<tempa<<endl;
//cout<<"tempb:"<<tempb<<endl;
if(strcmp(tempa,tempb)<0){
//字符串比较 ①字符串1小于字符串2,strcmp函数返回一个负值;
strcpy(temp,data[j]);
strcpy(data[j],data[i]);
strcpy(data[i],temp);
}
}
// cout<<"result"<<data[i]<<endl;
cout<<data[i];//每次的输出都是字符数组7 4 246 13
//printf("%s",data[i]);//连续输出data[i] 不换行不加空格
}
return 0;
}
strcat函数
strcat(dest,src) 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;
dest 最后的结束字符 NULL 会被覆盖掉,
并在连接后的字符串的尾部再增加一个 NULL
strcpy函数:strcpy(s1,s2);
把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.
这样s1在内存中的存放为:ch\0;
在cout<<s1<<endl时,结果为ch;事实上,在内存里面是这样的存储结构:ch\0na
如果说s1的长度是6,那是错误的.你没有弄清strlen与sizeof的意思。
strlen函数的意思是测试字符串的字符长度,不含字符串结束标志的。
sizeof是个运算符,它的结果是字符串在内存中的所占字节大小,它要把\0算进去的。
如:
#include <iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int main(int argc,char *argv[]) {
char s1[6]="china" ,s2[3]="ch";
cout<<s1<<endl; //china
cout<<strlen(s1)<<endl; //5
cout<<sizeof(s1)<<endl; //6
strcpy(s1,s2);
cout<<s1<<endl; //ch
for (int i=0;i<6;i++) {
cout<<s1[i]<<endl;} //c h n a
cout<<strlen(s1)<<endl; //2
cout<<sizeof(s1)<<endl; //6
return 0;
}