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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()。写多了自然就会了。
参考技术A 正如ls所言, 比较函数这样写

调用函数得这样写

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

cmp为函数名
参考技术B 你这不就是字符串排序吗,不要使用Char,直接使用class CStringArray : public CObject就可以了。 你要使用两维数组的话,必须先对第一列排序,然后对第二列......很麻烦的。

C语言用qsort函数对二维数组第一列排序,这个

C语言用qsort函数对二维数组第一列排序,这个int cmp(const int *p1,const int *p2)
return p2[0]-p1[0];
哪错了,怎么改?

参考技术A int cmp(const void *p1,const void *p2)

return *((int*)p2)-*((int*)p1);

以上是关于C语言qsort函数对char型str[m][n]数组的排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言 怎么把char型附加在字符串的后面?

c语言 qsort 对结构体数组排序

C++怎么把string 转换为char型数组

c语言 关于字符数组和整型数组清零

C语言字符串排序

字符串数组排序(C语言)(qsort库函数)