程序正确,但不符合题目要求,请帮忙改下,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/25 21:15:48
这个程序是对的,但是没编写题目要求的函数,所以不符合题目要求,请帮忙改下,谢谢!

【问题描述】
编写一个函数char * str_bin(char* str1, char* str2), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。
【输入形式】
分行从键盘输入两个有序字符串(不超过100个字符)
【输出形式】
输出合并后的有序字符串
【输入样例】
aceg
bdfh
【输出样例】
abcdefgh
【样例说明】
输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh

#include<stdio.h>
#include<string.h>

strsort(char *s)
{
int i,j,n;
char t,*w;
w=s;
for (n=0;*w!='\0';n++)
w++;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(s>s[j])
{
t=s;
s=s[j];
s[j]=t;
}
}
main( )
{
char s1[100],s2[100],s3[200];
int x,i;
scanf("%s",s1);
scanf("%s",s2);
x=strlen(s1);
for(i=0;i<x;i++)
s3=s1;
strcat(s3,s2);

/*
看你原来的代码[i]都被吃掉了,是不是先贴到论坛上,再从论坛上直接贴到这里来的啊?哈哈
这里关键是str_bin里声明静态地址,这样函数返回后这段地址还会留着
否则在函数返回后,地址里的东西都被销毁了
比如果这样
char * str_bin(char* str1, char* str2)
{
char tmp[200];
strcpy(tmp,str1);
strcat(tmp,str2);
strsort(tmp);
return tmp;
}
当函数结束后,分给tmp[200]的那段地址就被分配给别人,
也就是tmp[200]的内容很可能会被改变(实际上会被改得面目全非),
这时如果在主函数里调用str_bin(s1,s2),他指向的就是内容不确定的地址。
还有str_bin()不应该依赖于外部的strsort()函数
*/

#include<stdio.h>
#include<string.h>

char * str_bin(char* str1, char* str2)
{
static char tmp[200];
char t;
int i,j,n;
strcpy(tmp,str1);
strcat(tmp,str2);
n=strlen(tmp);
for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if(tmp[i]>tmp[j])
{
t=tmp[i];
tmp[i]=tmp[j];
tmp[j]=t;
}
return tmp;
}

main( )
{
char s1[100],s2[100],s3[200];