不用string.h输入任意五个字符串并比较大小然后输出。我要崩溃了!!子函数检查过没有错误啊!!求助啊,快气死了啊!
#include<stdio.h>
#define pf printf
int strcmm(const char *str1,const char *str2)
{
for(;*str1==*str2;str1++,str2++)//
{
if(*str1=='\0')return 0;
}
if( *(unsigned char *)str1 > *(unsigned char *)str2 )
return 1;
else if( *(unsigned char *)str1 < *(unsigned char *)str2 )
return -1;
}
void strcpp(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i]!='\0';i++);
for(j=0;s2[j]!='\0';j++)
s1[i++]=s2[j]; s1[i]='\0';
}
int main(void)
{
char a[5][20],t[20]="";
//char b[][10]={"gfreg","cdwegf"};
int i,j;
//strcpp(t,b[1]);//子函数无错
//puts(t);
//j=strcmm(t,b[0]);
//printf("%d",j);
for(i=0;i<5;i++)
gets(a[i]);//没错for(i=0;i<5;i++)
//for(j=0;j<1;j++)
//puts(a[3]); //scanf("%s",a[i][j]);huo zhe gets(a);
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if( strcmm(a[j],a[j+1]) < 0 )
{
strcpp(t,a[j]);
strcpp(a[j],a[j+1]);
strcpp(a[j+1],t);
}
for(i=0;i<5;i++)
puts(a[i]);
} C语言
[解决办法]
void strcpp(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i]!='\0';i++); 这个分号干嘛?
for(j=0;s2[j]!='\0';j++)
s1[i++]=s2[j]; s1[i]='\0'; 这两个语句属于哪个循环?
}
[解决办法]
注释有点乱,去掉吧再重整理一下,看的很麻烦
[解决办法]
代码好乱,楼主贴源码上来
[解决办法]
把void copy(char from[],char to[])
改为void copy(char to[],char from[])
你仔细看下你写的复制函数,在调用的时候顺序搞错了。
[解决办法]
copy(t,a[j]), 你实际是想把a[j]复制到t, 但你写的复制函数功能是把t复制到a[j],所以就如出现你所说的“如果t不赋初值就会出问题”。把复制函数改下就可以了。
[解决办法]
楼上正解。。