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

·C

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

cmp函数写法:

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

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

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

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

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

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

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

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

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

qsort函数的写法:

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

·C++

c++的sort要简单些。

sort函数写法:

 sort(a, a + n, cmp);

cmp函数:

 bool cmp(char *a, char *b){
return strcmp(a, b) < ;
}

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

C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法的更多相关文章

  1. sort对二维字符数组排序

    转载:sort对二维字符数组排序

  2. qsort(),sort()排序函数

    一.qsort()函数 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp ...

  3. js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结

    错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...

  4. 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

    [提交][状态][讨论版] 题目描述 有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 ...

  5. FastReport调用Delphi中的人民币大写转换自定义函数

    FastReport调用Delphi中的人民币大写转换自定义函数   FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...

  6. 【jquery】字符ascii码转换函数

    js 字符ascii码转换函数 字符转ascii码:用charCodeAt();ascii码砖字符:用fromCharCode(); 看一个小例子 <script> str="A ...

  7. 我用C#调用C编译的dll中有这样一个函数,函数大概的功能就是把数据保存到buf缓冲区中:

    我用C#调用C编译的dll中有这样一个函数,函数大概的功能就是把数据保存到buf缓冲区中: C/C++ code   ? 1 int retrieve(int scanno,void* buf); 在 ...

  8. 题目1004:Median(qsort函数自定义cmp函数)

    题目链接:http://ac.jobdu.com/problem.php?pid=1004 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  9. JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。

    函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...

随机推荐

  1. java 笔记(5) —— 线程,yield,join

    一.线程各个状态与转换: 新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 .就绪状态:当一个线程创建了以后,其他的线程调用了它的start() ...

  2. 从零开始PHP攻略(3)——数据的存储与检索

    要点目录: I.保存数据 II.打开文件   III.创建并写入文件 IV.关闭文件 V.读文件 VI.给文件加锁 VII.删除文件 VIII.其他有用的文件操作函数 IX.数据库管理系统 1.保存数 ...

  3. https协议

  4. java collections读书笔记(8)collection框架总览(1)

  5. Codeforces Round #312 (Div. 2) E. A Simple Task

    题目大意就是给一个字符串,然后多个操作,每次操作可以把每一段区间的字符进行升序或者降序排序,问最终的字符串是多少. 一开始只考虑字符串中字符'a'的情况,假设操作区间[L,R]中有x个'a',那么一次 ...

  6. angular form 验证 ngMessage

    <!DOCTYPE HTML> <html ng-app="deliciousApp"> <head> <meta charset=&qu ...

  7. xla_events

    LOOKUP_TYPE LANGUAGE LOOKUP_CODE MEANING DESCRIPTION XLA_EVENT_PROCESS_STATUS US D Draft Draft XLA_E ...

  8. linux 压缩文件的命令总结

    Linux压缩文件的读取 *.Z       compress 程序压缩的档案: *.bz2     bzip2 程序压缩的档案: *.gz      gzip 程序压缩的档案: *.tar     ...

  9. 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版

    <zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...

  10. json_encode注意

    PHP5.2或以上的版本把json_encode作为内置函数来用,但只支持utf-8编码的字符,否则中文就会出现乱码或者空值.解决办法如下: 1.保证在使用JSON处理的时候字符是以UTF8编码的.具 ...