三个字符串从小到大排列并输出

来源:百度知道 编辑:UC知道 时间:2024/09/28 08:22:00
RT.下面的源代码为什么输不出正确结果?问题出在哪?请高手指点。谢了。
PS.我用的是冒泡排序法。
#include<stdio.h>
#include<string.h>
int main()
{
void short_to_long(char *p[]);
char a[3][100];
char *p[3];
int i;

for(i=0;i<=2;i++)
{
gets(a[i]);
p[i]=a[i];
}

short_to_long(p);

for(i=0;i<=2;i++)
printf("%s\n",p[i]);

putchar('\n');

return 0;
}

void short_to_long(char *p[])
{
char *temp;
int i,j;
for(i=1;i<=2;i++)
for(j=0;j<=2-i;j++)
if(strcmp(p[j],p[j+1])>0)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}

没问题啊。。。
不过看函数名short_to_long,你的意思可能是比较字符串长度吧。。

把倒数第7行
if(strcmp(p[j],p[j+1])>0)
改成 if(strlen(p[j]) > strlen(p[j+1]))
就可以把字符串从短到长排列了

PS:
字符串大小与长度不一样
比如"1111","22"
大小:"1111" < "22",因为1的ASCII小于2的ASCII
长度:"1111" > "22"