参考代码:

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

void sort(char **p,int n) //用于排序的函数,n代表有几个字符串,要比几次 
{
	char *temp; //中间变量temp
	int i,j;
	
	for(i=0;i<n;i++) //i和j对比,此时的重点在于排列p数组中的顺序 
	{
		for(j=i+1;j<n;j++)
		{
			if (strcmp(p[i], p[j]) > 0) 
			//比较两个字符串,若前者更大就交换两者的在p中的顺序
			//最后按p的顺序输出,对应了从小到大 
			{
				temp = p[i];
                p[i] = p[j];
                p[j] = temp; //交换两个字符串在p中的位置(指针层面) 
			} 
		}
	} 
} 

int main() {
	
	int i;
	char s[3][100]; //3代表3段字符串,100是字符串的最大长度 
	char *p_s[3]; //这是一个数组,数组里的元素都是指针 
	char **p; //二级指针p,表示它是一个指向指针的指针 
	
	for(i=0;i<3;i++)
	{
		gets(s[i]); //这里的s实际是个二维数组,比如说第一次i=0输入的内容是s[0][...] 
		
		p_s[i]=s[i]; //将s[0], s[1], s[2]找出来,即每句话的首地址,然后给指针数组p_s 
	}
	
	p=p_s; //将指针数组p_s的首地址给二级指针p
	sort(p,3);
	
	for (int i = 0; i < 3; i++) puts(p_s[i]);
	//不能用 puts(p),因为p是一个指针
	//不能用 puts(p_s),因为p_s是一个存放指针的数组
	//能用 puts(p_s[i]),因为每个 p_s[i]都指向一个字符串 
	return 0;
	 
}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论