解题思路:

1、字符串比较大小的函数strcmp(char *a, char *b)

    a) a == b 返回0

    b)a < b 返回负值

    c) a > b返回正值

2、字符串拷贝函数 strcpy(char *a, char *b),将字符串b拷贝到字符串a中。

3、既然是排序问题,那么就可以用冒泡排序法。

注意事项:

参考代码:

#include<stdio.h>
#include<string.h>

int main()
{
	char a[3][128], tmp[128];
	int i, j;
	for(i=0; i<3; i++)
	{
		scanf("%s", a[i]);
	}
	for(i=0; i<3; i++)
	{
		for(j=i+1; j<3; j++)
		{
			if(strcmp(a[i], a[j]) > 0)
			{
				memset(tmp, 0, sizeof(tmp));
				strcpy(tmp, a[i]);
				strcpy(a[i], a[j]);
				strcpy(a[j], tmp);
			}
		}
	}
	for(i=0; i<3; i++)
	{
		printf("%s\n", a[i]);
	}
	return 0;
}


点赞(27)
 

0.0分

64 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 44 条评论

零K沁雪 5年前 回复TA
@周周小鱼 3个字符串排序,程序需要接收3个字符串,把多个字符串放到一个数组里面,就用二维数组啦
周周小鱼 5年前 回复TA
A为什么是二维数组啊
小雨 5年前 回复TA
#include<stdio.h>
#include<string.h>
void swap(int *a,int *b);
void in(int a[]);
void deal(int a[]);
void print(int a[]);
int main()
{
    int a[10];
    in(a);
    deal(a);
    print(a);
    return 0;
}
void swap(int *a,int *b)
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}
void in(int a[])

{
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
}
void Print(int a[])
{
    int i;
    for(i = 0;i < 10;++i)
        printf("%d ",a[i]);
}
void deal(int a[])
{
    int i;
    for(i=1;i<10;i++)
    {
        if(a[0]>a[i])
        {
            swap(&a[0], &a[i]);
        }
    }
奔跑吧C 5年前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
	char a[3][100],Huan[100];
	for (int i = 0;i < 3;i++)
	{
		fgets(a[i], 100, stdin);
	}
	for (int i = 0;i < 3;i++)
	{
		for (int n = i + 1;n < 3;n++)
		{
			if (strncmp(a[i], a[n], 100) > 0) // 大于0  a[i]>a[n]
			{  
				memset(Huan, 0, 100);          // 初始化 中转字符数组
				strncpy_s(Huan, a[i],100);       //交换a[i]跟a[n] 
				strncpy_s(a[i], a[n], 100);
				strncpy_s(a[n], Huan, 100);
			}
		}
	}
	for (int i = 0;i < 3;i++)
	{
		printf("%s",a[i]);
	}
	return 0;
}
为什么错误50%
福卡 5年前 回复TA
还有老师,你这个代码我怎么看不明白啊,哈哈。。。
(假设输入的时候第一行字符串最大,第三行字符串最小)你的第十二行for循环i=0运行第一次,运行完成以后第一行字符转移到了第三行的位置,原本第二第三行字符往前面移动,变成了第一第二行,这个时候的第一行比第二行大,而你第十二行的for循环运行第二次i=1的时候,for循环里面的内循环是从j=i+1=2,也就是三行代码里面的第二行开始往下面比较,而第一行你就没有管他了,我就这里感觉好像有点问题。
福卡 5年前 回复TA
@福卡 跟上一个代码差不多,只是改了输入部分而已
福卡 5年前 回复TA
新代码是这样的,但是运行得到的结果是错误的,而且还是一堆乱码
#include<stdio.h>
main()
{
	char a[3],b[3],c[3];
	int x;
	for(x=0;x<3;x++)
	scanf("%c",&a[x]);
	getchar();
	for(x=0;x<3;x++)
	scanf("%c",&b[x]);
	getchar() 
	for(x=0;x<3;x++)
	scanf("%c",&c[x]); 
	if(strcmp(a,b)>0)
	{
		if(strcmp(b,c)>0)
		{
			puts(c);
			puts(b);
			puts(a);
		}
		else
		{
			if(strcmp(a,c)>0)
			{
				puts(b);
				puts(c);
				puts(a);
			}
			else
			{
				puts(b);
				puts(a);
				puts(c);
			}
		}
	}
	else
	{
		if(strcmp(a,c)>0)
		{
			puts(c);
			puts(a);
			puts(b);
		}
		else
		{
			if(strcmp(b,c)>0)
			{
				puts(a);
				puts(c);
				pu
福卡 5年前 回复TA
@福卡 你的意思是说数组定义的太少了?#include<stdio.h> main() { 	char a[3],b[3],c[3]; 	int x; 	for(x=0;x<3;x++) 	scanf("%c",&a[x]); 	getchar(); 	for(x=0;x<3;x++) 	scanf("%c",&b[x]); 	getchar()  	for(x=0;x<3;x++) 	scanf("%c",&c[x]);  	if(strcmp(a,b)>0) 	{ 		if(strcmp(b,c)>0) 		{ 			puts(c); 			puts(b); 			puts(a); 		} 		else 		{ 			if(strcmp(a,c)>0) 			{ 				puts(b); 				puts(c); 				puts(a); 			} 			else 			{ 				puts(b); 				puts(a); 				puts(c); 			} 		} 	} 	else 	{ 		if(strcmp(a,c)>0) 		{ 			puts(c); 			puts(a); 			puts(b); 		} 		else 		{ 			if(strcmp(b,c)>0) 			{ 				puts(a); 				puts(c); 				puts(b); 			} 			else 			{ 				puts(a); 				puts(b); 				puts(c); 			} 		} 	} }
lisky 5年前 回复TA
@福卡 gets(s)函数存在缓冲区溢出的问题,就是说gets(s)函数不会管s的空间有多大,会不停的往s中存储内容,不推荐使用,还有字符数组定义的太小了
福卡 5年前 回复TA
大神求解答,我这个代码老是说运行错误50%
#include<stdio.h>
main()
{
	char a[4],b[4],c[4];
	gets(a);
	gets(b);
	gets(c);
	if(strcmp(a,b)>0)
	{
		if(strcmp(b,c)>0)
		{
			puts(c);
			puts(b);
			puts(a);
		}
		else
		{
			if(strcmp(a,c)>0)
			{
				puts(b);
				puts(c);
				puts(a);
			}
			else
			{
				puts(b);
				puts(a);
				puts(c);
			}
		}
	}
	else
	{
		if(strcmp(a,c)>0)
		{
			puts(c);
			puts(a);
			puts(b);
		}
		else
		{
			if(strcmp(b,c)>0)
			{
				puts(a);
				puts(c);
				puts(b);
			}
			else
			{
				puts(a);
				puts(b);
				puts(c);
			}
		}
	}
}