zoukankan      html  css  js  c++  java
  • C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法

    这个问题屡次碰到解决之后再次遇到又忘记怎么弄了,这次打算彻底搞清楚。

    ·C

    首先对所谓字符数组的排序应该是对(char)*a[]数组而非(char)a[][]进行的排序,后者是无法直接调用qsort实现其排序的。

    cmp函数写法:

    1 int cmp(const void *a, const void *b){
    2     return strcmp(*((char**)a), *((char**)b));
    3 }

    很容易想象字符串在初始化时已经被分配了特定的存储空间,我们用其首地址标识该字符串。

    对于字符数组的排序实际上是对于变量类型:字符型指针(char*)的排序。

    排序的结果实际上是(字符)指针 数组元素位置的变化。

    因此cmp函数提供了const void型指针的接口,表示被排序的对象。

    我们要排序的是*a, *b(类型为void),由于我们要做的是对字符串(字符指针)排序。

    首先将其强制转化为指向字符指针的指针,这里相当于申请一个指向字符型的指针p,再让a指向p。

    那么有*a = p,这样就间接得到了指向对应字符串的char类型指针。

    也就可以同strcmp函数通过对原串的比较排序*a 与 *b。

     qsort函数的写法:

    1 qsort(a, n, sizeof(char*), cmp);

    ·C++

    c++的sort要简单些。

    sort函数写法:

    1 sort(a, a + n, cmp);

    cmp函数:

    1 bool cmp(char *a, char *b){
    2     return strcmp(a, b) < 0;
    3 }

    由于C++ sort 中cmp函数提供的接口是直接针对元素的排序,所以我们只需考虑对字符指针本身的比较就行了。

  • 相关阅读:
    k8s Helm安装Prometheus Operator
    maven私有库神坑之:“Downloading: http://repo.maven.apache.org/maven2/”深坑!!!!!!坑害了一周时间
    docker java基础镜像
    helm安装EFK
    helm部署redis主从和哨兵模式
    k8s资源存储pv pvc 动态持久化存储StorageClass
    k8s service概述
    harbor镜像仓库原理和安装
    制作免费的https证书
    OpenStack点滴03-Neutron
  • 原文地址:https://www.cnblogs.com/astoninfer/p/4873034.html
Copyright © 2011-2022 走看看