#include
#include
void main()
{
void compare(char*arr1, char*arr2, char*arr3);
char a[30], b[30], c[30];
printf("请输入第一个字符串:\n");
scanf("%s", a);
printf("请输入第二个字符串:\n");
scanf("%s", b);
printf("请输入第三个字符串:\n");
scanf("%s", c);
char*p1 = a, *p2 = b, *p3 = c;
compare(p1, p2, p3);
printf("最小的字符串为:%s\n排在中间的字符串为:%s\n最大的字符串为:%s\n", a, b, c);
system("pause");
}
void swap(char* s1, char *s2)
{
char temp[100];
strcpy(temp,s1);//temp = s1
strcpy(s1, s2);//s1 = s2
strcpy(s2, temp);//s2 = temp
}
void compare(char*arr1, char*arr2, char*arr3)
{
if (strcmp(arr1, arr2) > 0)
swap(arr1, arr2);
if (strcmp(arr1, arr3) > 0)
swap(arr1, arr3);
if (strcmp(arr2, arr3) > 0)
swap(arr2, arr3);
}
以上程序完美运行。可以达到你想要的效果。接下来讲讲为什么
首先主方法。
第三个字符串少了一个scanf.我给你加上了
你说的不能输入第二个字符串是不可能出现的情况,除非你用的gets
gets是从输入流中获取。流中没有等待用户输入,输入的内容还是在流中
scanf是从等待用户输入,不管输入流中有没有内容,他都等待。scanf收不了的内容,会进入流中。
在compare方法
这个就是逻辑问题了。
首先交换就出现问题了,
交换两个数据通常需要一个中间变量temp
如以下代码
temp = a
a = b
b= temp
这样才实现两个交换
字符串交换需要用strcpy. 因为字符串不能直接用 = 赋值。
注意是赋值。 初始化可以用等号。如char s[] = "abc"
你的核心问题就是 就是从小到大排序。
你解决的思路是对的。 但是实现出现了问题
不能先写三个strcmp ..在进行交换。你肯定会问为什么?
因为每次比较交换都可能交换字符串。一但交换数据,你预先存的大小关系就被打破了,你是用3个整形变量存的。
基本上回答完毕
-----------------------------
我说下我的思路。如果只是想看到从小到大的字符串,其实很简单,不用交换数组里的数据,只需改变最初指针指向即可。很好实现的,你试试。如果没做出来,说一声,我把代码贴上来。
一、不知道你是怎么输入的,可以提供一下你的运行截图,帮你看看
二、你程序中少了第三个输入语句啊
printf("请输入第一个字符串:\n");
scanf("%s",a);
printf("请输入第二个字符串:\n");
scanf("%s",b);
printf("请输入第三个字符串:\n");
scanf("%s",c); //这里是不是应该加上这个?
char*p1=a,*p2=b,*p3=c;