C语言 由小到大排序三个字符串 帮忙看一下下面的一段代码哪里出了问题,得出来的结果不对?

2025-06-27 06:10:58
推荐回答(2个)
回答1:

#include

#include

int main()

{

void sort(char *p1,char *p2);

char array[3][100];

int n=3,i,j;

char (*p)[100];

for(i=0;i<3;i++)

gets(array[i]);

p=array;

for(i=0;i<2;i++)

 for(j=0;j<2-i;j++)        /*改了这里连续2行*/

   sort(p[j],p[j+1]);

printf("\n");

for(i=0;i<3;i++)

 puts(array[i]);        /*puts已经换行了*/

}

void sort(char *p1,char *p2)

{

char b[100];

if(strcmp(p1,p2)>0)

{strcpy(b,p1);

strcpy(p1,p2);

strcpy(p2,b);

}

}

回答2:

逻辑错了,没有遍历。设A>B、B>C。你交换了A、B,然后A与C比较又交换了A、C,最后排成了B、C、A。A是最大的没错,可你能保证C一定大于B吗?增加一个内循环遍历就可以了:
在声明中增加一个j变量,把主函数中的
for(i=0;i<2;i++)
sort(p[i],p[i+1]);
改成
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
sort(p[i],p[j]);
就行了。