小学生


私信TA

用户名:DuYunHe

访问量:3046

签 名:

等  级
排  名 10763
经  验 1015
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校 村小学
专  业

  自我简介:

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

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

参考代码

#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分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区