输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,合并后仍然从小到大

#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
char a[N],b[N],c[N];
int i,j,k,f=(strlen(a)+strlen(b));
gets(a);gets(b);
for(i=0;i<strlen(a);i++) c[i]=a[i];
for(j=0;b[j]!=0;i++,j++) c[i]=b[j];
c[strlen(a)+strlen(b)]='\0';//把ab合并放入c
for(i=0;i<f-1;i++)
{
for(j=0;j<f-2-i;j++)
{
if(c[j+1]<c[j]) {k=c[j];c[j]=c[j+1];c[j+1]=k;}
}
}//冒泡排序
puts(c);
return 0;
}

#include<stdio.h>

#include<string.h>

#define N 100

int main()

{

char a[N],b[N],c[N];

int i,j;

char k;//k要定义成字符型

gets(a);

gets(b);

int f=(strlen(a)+strlen(b));//只有输入了字符串a b才能计算出字符长度

for(i=0;i<strlen(a);i++) c[i]=a[i];

for(j=strlen(a),i=0;b[i]!='\0';j++,i++) c[j]=b[i];//上面你放i时是从0开始的现在有从0开始则会把数组a覆盖掉

c[strlen(a)+strlen(b)]='\0';//把ab合并放入c

for(i=0;i<f-1;i++)

{

for(j=0;j<f-2-i;j++)

{

if(c[j+1]<c[j]) {k=c[j];c[j]=c[j+1];c[j+1]=k;}

}

}//冒泡排序

c[f]='\0';

puts(c);

return 0;

}

排序的方法可以用更快的方法  你的方法也没错

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-30
char a[N],b[N],c[N]; //建议c[2*N];你懂的
对于 两个已经按从小到大顺序排列好的字符串
最好利用这个条件来减少运行时间,楼主有时间可以参考下这个
#include<stdio.h>#include<string.h>
#define N 100
int main()
{
char a[N],b[N],c[2*N];
int i,j,k;
scanf("%s",&a);
scanf("%s",&b);
k=0;
for(i=0,j=0;i<=strlen(a)||j<=strlen(b);)
{
if(a[i]=='\0')
{
c[k++]=b[j++];
if(j==strlen(b))
{
c[k]='\0';
break;
}
}
else if(b[j]=='\0')
{
c[k++]=a[i++];
if(i==strlen(a))
{
c[k]='\0';
break;
}
}
else if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
printf("%s\n",c);
return 0;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网