2201_75540537 2023-01-19 09:24 采纳率: 71.4%
浏览 36
已结题

关于这个工具函数的写法

img


void sort_Chars(Chars arr [], Uint arrLen, int (* compChars)(const char *, Uint, const char *, Uint));
图片为申明

img


chars是一个结构体

  • 写回答

1条回答 默认 最新

  • a5156520 2023-01-19 11:00
    关注

    根据提供的资料,写了一个实现, 供参考:

    参考链接:

    
    #include <stdio.h>
    #include <string.h>
    
    typedef unsigned int Uint;
    
    typedef struct chars {
    
        char * addr;
        Uint len;
    } Chars;
    
    int comp_chars(const char *s1, Uint len1, const char *s2, Uint len2) {
        
        int d;
        const char *st1=s1;
        const char *st2=s2;
        while(*s1==*s2) {
            if(s1==(st1+len1-1)||s2==(st2+len2-1))
                break;
            s1++;
            s2++;
        }
        d=*s1-*s2;
        if(d<0)
            return -1;
        if (d==0)
            return 0;
        if(d>0)
            return 1;
    }
    
    void sort_Chars(Chars arr [], Uint arrLen, int (* compChars)(const char *, Uint, const char *, Uint)){
        
        Uint i,j,tlen;
        char temp[100];
        
    
        //   使用函数指针compChars指向的函数 排序结构数组arr里的元素 
        for(i=0;i<arrLen-1;i++){
            
            for(j=i+1;j<arrLen;j++){
                
                int compResult = (*compChars)(arr[i].addr,arr[i].len,arr[j].addr,arr[j].len);
        
            //    printf("compResult=%d,i=%u,j=%u\n",compResult,i,j);
                if(compResult>0){ // 如果比较结果大于0,则交换i和j位置的结构的字段,达到排序的目的 
                    
                    strcpy(temp,arr[i].addr);
                    strcpy(arr[i].addr,arr[j].addr);
                    strcpy(arr[j].addr,temp);
                    
                    
                    tlen = arr[i].len;
                    arr[i].len = arr[j].len;
                    arr[j].len = tlen;
                    
                
                }
                
            }
            
        }     
    }
    
    int main(void){
        
        int i;
        int (* compChars)(const char *, Uint, const char *, Uint)= comp_chars;
    
        Chars arr[5];
        char cs[5][20]={"today is good day","super man","good good study","abcdefg","xyz is end"};
    依次    
        // 给结构数组5个元素赋值 
        arr[0].addr = cs[0];
        arr[0].len = strlen(arr[0].addr);
    
        arr[1].addr = cs[1];
        arr[1].len = strlen(arr[1].addr);
        
        arr[2].addr = cs[2];
        arr[2].len = strlen(arr[2].addr);
        
        arr[3].addr = cs[3];
        arr[3].len = strlen(arr[3].addr);
        
        arr[4].addr = cs[4];
        arr[4].len = strlen(arr[4].addr);
        
        
    
        
        printf("排序前:\n");
        for(i=0;i<5;i++){
            // https://blog.csdn.net/weixin_42979760/article/details/125590028
            printf("%s , %u\n",arr[i].addr,arr[i].len);
        }
        
        // 调用 sort_Chars()函数排序结构数组arr的元素 
        sort_Chars(arr,5,compChars) ;
        
        printf("排序后:\n");
        for(i=0;i<5;i++){
            printf("%s , %u\n",arr[i].addr,arr[i].len);
        }
        
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 修改了问题 1月19日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题