C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法
这个问题屡次碰到解决之后再次遇到又忘记怎么弄了,这次打算彻底搞清楚。
·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函数写法的更多相关文章
- sort对二维字符数组排序
转载:sort对二维字符数组排序
- qsort(),sort()排序函数
一.qsort()函数 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp ...
- js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...
- 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
[提交][状态][讨论版] 题目描述 有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 ...
- FastReport调用Delphi中的人民币大写转换自定义函数
FastReport调用Delphi中的人民币大写转换自定义函数 FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...
- 【jquery】字符ascii码转换函数
js 字符ascii码转换函数 字符转ascii码:用charCodeAt();ascii码砖字符:用fromCharCode(); 看一个小例子 <script> str="A ...
- 我用C#调用C编译的dll中有这样一个函数,函数大概的功能就是把数据保存到buf缓冲区中:
我用C#调用C编译的dll中有这样一个函数,函数大概的功能就是把数据保存到buf缓冲区中: C/C++ code ? 1 int retrieve(int scanno,void* buf); 在 ...
- 题目1004:Median(qsort函数自定义cmp函数)
题目链接:http://ac.jobdu.com/problem.php?pid=1004 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。
函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...
随机推荐
- PostgreSQL/bin
pg_receivexlog pg_receivexlog—以流的方式从一个PostgreSQL集簇得到事务日志 pg_receivexlog被用来从一个运行着的PostgreSQL集簇以流的方式得到 ...
- Lintcode: Update Bits
Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits be ...
- 网易免费邮件开启smtp教程
网易免费邮件开启smtp教程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们在部署zabbix邮件报警中可能会用到163.com.那么我们如何去开启smtp服务呢? 1 ...
- HTML调用servlet(一)
1.页面的数据表单 在使用Servlet处理用户请求之前,先准备一个页面,该页面用来提供数据表单.数据表单就是HTML中的<form>...</form>部分,当用户单击Sub ...
- TPageControl组件
TPageControl的功能是创建多个Dialog页,而这些重叠的每一个页Dialog就是通过TTabSheet对象实现的
- const 关键字及作用
1.const 修饰一般常量,可以把变量变成常量 例如: int num=10; num=100; printf(“num=%d\n”,num); 输出的来得值为:100: 但是如果const in ...
- poj: 1003
简单题 #include <iostream> #include <stdio.h> #include <string.h> #include <stack& ...
- java经典小算法
package com.shb.java; public class Demo4 { /**时间有限 先不写文字了 自己随便敲的 * @param args * @author shaobn */ p ...
- java异常类
package shb.java.exception; /** * 测试异常类 * @Package:shb.java.exception * @Description: * @author shao ...
- paper 65 :尺度不变特征变换匹配算法[转载]
尺度不变特征变换匹配算法 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越.1.SIFT综述 尺度不变特征转换(Scale-invariant feature transf ...