致珊珊来迟的你 谱:程序正确,但不符合题目要求,请帮忙改下,谢谢!

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 13:29:01
这个程序是对的,但是没编写题目要求的函数,所以不符合题目要求,请帮忙改下,谢谢!

【问题描述】
编写一个函数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);
strsort(s3);
printf("%s\n",s3);
}

/*
看你原来的代码[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];
scanf("%s",s1);
scanf("%s",s2);
strcpy(s3,str_bin(s1,s2));
printf("%s\n",s3);
getch();
}

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

void 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[i] > s[j])
{
t = s[i];
s[i] = s[j];
s[j] = t;
}
}

char * str_bin(char* str1, char* str2)
{
char str3[200] = {'\0'};
int x = strlen(str1);
for(int i = 0; i < x; i++)
str3[i] = str1[i];
strcat(str3, str2);
return str3;
}

void main( )
{
char s1[100] = {'\0'}, s2[100] = {'\0'}, s3[200] = {'\0'};
int x = 0, i = 0;
scanf("%s", s1);
scanf("%s", s2);
strsort(s1);
strsort(s2);
strcpy(s3, str_bin(s1, s2));
strsort(s3);
printf("%s\n", s3);
}