【c语言】2每日一练,用指针为5个字符串排序

发布时间:2023年12月26日

题目描述:

输入五个字符串,按从小到大的顺序输出(要求运用指针)

问题分析:

定义一个五行的二维数组用于存放五个字符串,后定义一个数组指针,用循环使指针指向每一行的字符串,如图。用fun函数实现5个字符串的排序。用sor函数按指针数组顺序输出。

fun函数的实现:与冒泡排序相似,两两比较将大的“沉”下面,小的“浮”上面。5个字符串只需要比较4次,外循环表示前一个字符串,内循环表示后一个字符串,用strcmp对两个字符串经行比较,如果前一个字符串大,就交换指针p[]指向的地址。

最后用sor函数按指针数组的顺序输出p[ ]储存的地址指向的字符串。

注意 字符串的交换 和 字符的交换 的区分:

#include <stdio.h>
void change(int* pt1, int* pt2)  //传入地址
{
	int t;
	t = *pt1;
	*pt1 = *pt2;
	*pt2 = t;
}                               //交换指向的值而非地址
void main()
{
	int* p, * p2, a=34, b=67;
	p = &a, p2 = &b;
	change(p, p2);
	printf("%d %d", a, b);
}

代码实现:

#include <stdio.h>
#include <string.h>
void fun(char* p[], int n)
{
	int i, j;
	char* temp;
	for (i = 0; i < n - 1; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			if (strcmp(p[i], p[j]) > 0)     //交换地址
			{
				temp = p[i];
				p[i] = p[j];
				p[j] = temp;
			}
		}

	}
}
void sor(char* p[], int n)
{
	for (int i = 0; i < n; i++)
		printf("%s\n", p[i]);       //输出p[i]储存的地址指向的字符串
}
int main()
{
	char s[5][20];
	char* p[5];
	int i,n=5;
    printf("请输入5个字符串:\n");
	for (i = 0; i < 5; i++)
	{
		gets(s[i]);
		p[i] = s[i];         //指向各行
	}
	fun(p, n);             //排序
	printf("排列好的顺序为:\n");
	sor(p, n);           //输出
	return 0;
}

运行结果:

//个人愚见,有问题请指出,感谢!

文章来源:https://blog.csdn.net/2301_80705795/article/details/135168322
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。