数串 字符串的冒泡排序 字符串strcpy strcat strcmp

介绍了一种通过冒泡排序算法实现的特殊字符串排序方法,该方法用于将多个正整数重新排列以形成一个最大的整数。并通过两个示例程序详细展示了具体的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
   如: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;
   } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值