请输入三个字符串,按由小到大的顺序输出。(用指针方法处理) 出错,求高手

#include<stdio.h>
#include<string.h>
void main()
{
void swap(char*p1,char*p2);
char*sp1,*sp2,*sp3;
char str1[70],str2[70],str3[70];
printf("请输入三行字符串:\n");
gets(str1);
gets(str2);
gets(str3);
sp1=str1,sp2=str2,sp3=str3;
if(strcmp(str1,str2)>0)
swap(sp1,sp2);
if(strcmp(str2,str3)>0)
swap(sp2,sp3);
if(strcmp(str1,str2)>0)
swap(sp1,sp2);
printf("字符串由小到大的顺序是:\n");
puts(sp1);
puts(sp2);
puts(sp3);
}

void swap(char*p1,char*p2)
{
char j;
j=*p1;
*p1=*p2;
*p2=j;
}
//输出后只是字符串首字母互换了 肿么回事?

你的swap函数仅仅交换了第一个字符,把swap函数改成这样就好了
void swap(char*p1,char*p2)
{
char j[70];
strcpy(j,p1);
strcpy(p1,p2);
strcpy(p2,j);
}追问

这此是换了,可是交换以后 最长的不是在最后一个 而是在中间,是因为 stycmp函数本身的原因?还是说我自己哪错了? 求解,谢谢

追答

strcmp比较不是看长度的,而是看ascii码的大小的比如 baa就大于aaaaaaaaa
你要是按长度排的话用strlen

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-16
#include <stdio.h>
2 #include <string.h>
3 void change(char *a,char *b)
4 {
5 char p[50];
6 if (strcmp(a,b)>0)
7 {
8 strcpy(p,a);
9 strcpy(a,b);
10 strcpy(b,p);
11 }
12 }
13
14 void exchange(char *a,char *b,char *c)
15 {
16 change(a,b);
17 change(a,c);
18 change(b,c);
19 }
20
21 int main()
22 {
23 char a[20];
24 char b[20];
25 char c[20];
26 scanf("%s%s%s",a,b,c);
27 exchange(a,b,c);
28 printf("%s,%s,%s",a,b,c);
29 }
相似回答