解题思路:

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 条评论

普卡 1年前 回复TA
为什么我这个在vs里无法输出啊
如果我是低阶你会爱我吗 1年前 回复TA
朋友们,请教一下,第十行,本来定义的二维,写的一维,没写列,表示的是接收这一行的吗,
还有假如定义的列是3,我赋值100000个字母也没事,这不算越界吗
uq_47536912922 1年前 回复TA
@自律给我自由 tmp应该要清0,不写会出现bug,可以用tmp[i]=0代替
奋斗的嘉 2年前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
  char	a[100],b[100],c[100];
  gets(a);gets(b);gets(c);
  if(strcmp(a,b)<=0){
  	if(strcmp(a,c)<=0){
	  	puts(a);
	  	if(strcmp(b,c)<=0){
	  		puts(b);puts(c);
		  }
		  else{puts(c);puts(b);}
	  }
	  else{
	  	puts(c);
		  if(strcmp(a,b)<=0){
		  	  		puts(a);puts(b);
		  		  }
		  		  else{puts(b);puts(a);}
	  }
  }
  else if(strcmp(b,c)<=0){
  	puts(b);if(strcmp(a,c)<=0){
	  		  	  		puts(a);puts(c);
	  		  		  }
	  		  		  else{puts(c);puts(a);}
  	
  }
  else{
  	
  	puts(c);
  	if(strcmp(a,b)<=0){
	  		  	  		puts(a);puts(b);
我好菜 2年前 回复TA
@懒散 这是冒泡排序吧,选择排序每轮选出符合条件的与相应位置进行交换,一轮只交换一次,而冒泡排序每次与关键字进行对比对比后直接交换位置
南岸以南南岸哀 2年前 回复TA
@自律给我自由 可
挫我 3年前 回复TA
#include <stdio.h>
#include <string.h>

char compare(char *p,char *q,char *w,char *k);

void main ()
{
	char a[3][40];
	char str[60];
	char *p,*q,*w,*k;
	int i;
	for(i=0;i<3;i++)
	{
		scanf("%s",a[i]);
	}
	p=a[0];q=a[1];w=a[2];k=str;
	compare(p,q,w,k);
	printf("%s\n",p);
	printf("%s\n",q);
	printf("%s",w);
}
char compare(char *p,char *q,char *w,char *k)
{
	
	if(strcmp(p,q)>0)
	{
		strcpy(k,p);strcpy(p,q);strcpy(q,k);
	
	}	
	if(strcmp(p,w)>0)
	{
		strcpy(k,p);strcpy(p,w);strcpy(w,k);
	}
	if(strcmp(q,w)>0)
	{
		strcpy(k,q);strcpy(q,w);strcpy(w,k);
	}
	return (1);
}
大佬能看懂我写的指针吗?过了,但感觉指针用的是错的。
挫我 3年前 回复TA
#include <stdio.h>
#include <string.h>

char compare(char *p,char *q,char *w,char *k);

void main ()
{
	char a[3][40];
	char str[60];
	char *p,*q,*w,*k;
	int i;
for(i=0;i<3;i++)
	{
		scanf("%s",a[i]);
	}
	p=a[0];q=a[1];w=a[2];k=str;
	compare(p,q,w,k);
	printf("%s\n",p);
	printf("%s\n",q);
	printf("%s",w);
}

char compare(char *p,char *q,char *w,char *k)
{
	if(strcmp(p,q)>0)
	{
		strcpy(k,p);strcpy(p,q);strcpy(q,k);
	
	}	
	if(strcmp(p,w)>0)
	{
		strcpy(k,p);strcpy(p,w);strcpy(w,k);
	}
	if(strcmp(q,w)>0)
	{
		strcpy(k,q);strcpy(q,w);strcpy(w,k);
	}
	return (1);
}
我的
自律给我自由 3年前 回复TA
memset(tmp, 0, sizeof(tmp));
这一句不写行不行啊
黄科大20计科李汶洲 3年前 回复TA
请大佬指教 这总是运行错误怎么回事
#include<stdio.h>
#include<string.h>
void swap (char *s1,char *s2)
{
	char t[10];
	strcpy(t,s1);
	strcpy(s1,s2);
	strcpy(s2,t);
}
int main()
{
	char a[10];
	char b[10];
	char c[10];
	scanf("%s%s%s",&a,&b,&c);
	if(strcmp(a,b)>0)
		swap(a,b);
	if(strcmp(a,c)>0)
		swap(a,c);
	if(strcmp(b,c)>0)
		swap(b,c);
	printf("\n%s\n%s\n%s",a,b,c);	
	return 0;
}