解题思路:别人的函数是个“黑箱子”!原理还得自己摸索;

注意事项:指针操作较多,有点绕

参考代码

#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;
}:

点赞(3)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论