解题思路:别人的函数是个“黑箱子”!原理还得自己摸索;
注意事项:指针操作较多,有点绕
参考代码
#include<stdio.h>
void bdx(int *a , int *b );//自定义函数,比较字符串大小;参数是指针类型;
int zfcd(int *a );//自定义函数,求字符串长度;
int main()
{
char az[64] = { 0 }, bz[64] = { 0 }, cz[64] = { 0 };
int d, e,f;
gets(az);
gets(bz);
gets(cz);
d = (int)az;//az是字符串的地址,地址转换为int型传入d;下同;
e = (int)bz;
f = (int)cz;
bdx(&d, &e);//关键点,把“字符串地址变量”的地址传入“比大小”函数;冒泡排序法,大的向后传!
bdx(&e, &f);//e已经大于d了,再比较e和f,大数传入f,f最大!
bdx(&d, &e);//e中是和f比较传入的较小的数,再和a比较,小数传入a,a最小!
printf("%s\n%s\n%s\n", (char*)d,(char*)e,(char*)f);//关键点,把变量的值转换成地址;
main();
return 0;
}
void bdx(int *a ,int *b )//“比大小函数;
{
int x = zfcd(a), //a的值是“字符串地址变量”的地址;去求字符串长度;
y = zfcd(b); //同上;
if (x > y)//字符串长度比较,把长的放后面;
{
int z = *b;
*b = *a;
*a = z;
return;//关键点,如果长度不同,把长的挪到后面后直接返回,下面不用执行;
}
for (int i = 0; i < x; i++)//长度相同才会执行到这,遍历字符比较大小;
{
if (*(char*)(*a + i) < *(char*)(*b + i))/*重点的重点:(*a+i)是取a(字符串地址变量)的值,+i是地址偏移量既字符地址;(char *)把a(字符串地址变量)的值转为char型指针(字符的地址);* 取指针的值,取字符的ascii码;*/
return;判断到前数小于后数时返回;
if (*(char*)(*a + i) > *(char*)(*b + i))//判断到前数大于后数时,交换位置后返回;
{
int z = *b;
*b = *a;
*a = z;
return;
}
}
}
int zfcd(int *a)//求字符长度;
{
int i = 0,
p = *a;
while (*(char*)(*a + i) != 0)
{
i++;
}
return i;
}:
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复