题目描述
输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。
输入
3行,每行一个用字符串。保证每个字符串的长度不超过20。
输出
按从小到大的顺序输出这3个字符串,每个字符串一行。
请注意行尾输出换行。
样例输入 Copy
China CLOCK deal
样例输出 Copy
CLOCK China deal
方法一
#include <stdio.h>
#include <string.h>
void swap_1(char** a,char** b) //参数是二级指针(指针的地址)
{
char* temp; //对指针(内容的地址)进行改变
temp= *a;
*a= *b;
*b=temp;
}
int main()
{
char a[50],b[50],c[50]; //字符串数组的交换,需要交换字符串地址
scanf("%s%s%s",a,b,c); //%s通过识别换行或空格结束当前字符串输入
char *p1=a,*p2=b,*p3=c; //p指针为数组地址a的地址
if(strcmp(a,b)>0) swap_1(&p1,&p2); //交换字符串地址a,b,就要传入地址a,b的地址p1,p2
if(strcmp(a,c)>0) swap_1(&p1,&p3);
if(strcmp(b,c)>0) swap_1(&p2,&p3); //交换后a,b,c数组不变,但p指针指向改变
printf("%s\n%s\n%s\n",p1,p2,p3); //此时p1指向最小字符串即b
return 0;
}
方法二
#include <stdio.h>
#include <string.h>
void swap_2(char *a,char *b) //字符串交换
{
char temp[20];
strcpy(temp,a); //strcpy拷贝字符串的函数
strcpy(a,b);
strcpy(b,temp);
}
int main()
{
char a[50],b[50],c[50];
scanf("%s%s%s",a,b,c);
if(strcmp(a,b)>0) swap_2(a,b);
if(strcmp(a,c)>0) swap_2(a,c);
if(strcmp(b,c)>0) swap_2(b,c);
printf("%s\n%s\n%s\n",a,b,c);
return 0;
}