C语言qsort函数对char型str[m][n]数组的排序

如果要对char型str[m][n]的数组进行排序,按字典顺序排序
cmp函数里面要怎样写啊
为什么这样写 return *(char *)a - *(char *)b;不对
这样写return strcmp(*(char**)a,*(char**)b);也不对
天堂鸟clz 大哥,你的答案是对的,你能告诉我为什么这样写吗,希望能详细点

// 这样写就OK啦。
int cmp(const void *a, const void *b)
{
char *aa = (char *) a;
char *bb = (char *) b;
return strcmp(aa,bb);
}
// const void *a是表示一个指向const void的指针,可以指向任意的类型,但是不能修改。这就需要将其强制转化。
// 因为是针对char型的二维数组,也就是说你排序的时候是想将字符串排序。
// 所以就应该转化成char*的指针,但是C字符串是没办法直接使用类似于-,+,<=,>=,==等操作符的,所以这个时候就需要调用strcmp函数,该函数位于
string.h头文件里面。假如你想对整型的一维数组排序,就应该转换成(int*)啦。结构体的排序也是类似,就强制转换成指向结构体的指针,然后里面想要比较的对象相减即可。
// ACM的题目里面也是经常会用到排序的。C++的话用sort函数。C的话能用qsort()就用qsort()。写多了自然就会了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-06
正如ls所言, 比较函数这样写

调用函数得这样写

qsort(str,m,sizeof(str[0]),cmp);

cmp为函数名
第2个回答  2010-08-06
你这不就是字符串排序吗,不要使用Char,直接使用class CStringArray : public CObject就可以了。 你要使用两维数组的话,必须先对第一列排序,然后对第二列......很麻烦的。
相似回答
大家正在搜