用qsort对字符串数组排序需要注意的几个问题
发布网友
发布时间:2022-05-12 17:02
我来回答
共1个回答
热心网友
时间:2023-10-14 21:52
声明一个字符串指针数组存放每个字符串的首地址,调用库函数qusort按题目要求对字符串指针排序,不移动源字符串。关键是要设计一个好的比较函数,精巧地解决“按长度、长度相等时按大小”排序的问题。举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"#include "string.h"#include "stdlib.h"#define N 10 //字符串个数#define LN 21 //*字符串长度为20int mycmp(const void *a,const void *b){//比较函数 char *pa=*(char **)a,*pb=*(char **)b; int x=int(strlen(pa)-strlen(pb));//依长度比较 return x ? x : strcmp(pa,pb);//长度相等时依大小比较}int main(void){ int i=0,j=0; char *f[N],w[LN*N];//声明指针数组f和字符串总空间 printf("Input %d string(s)(length<=%d)...\n",N,LN); while(i<N){//输入并将字符串首址赋给f[i] if(scanf(" %[1234567890]",f[i]=w+j)>0 && strlen(f[i])<LN) i++,j+=LN; else printf("Error, redo: Required length less than %d:",LN); } qsort(f,N,sizeof(char *),mycmp);//调用库函数对字符串指针排序 for(i=0;i<N;printf("%s\n",f[i++]));//输出... return 0;}
求qsort函数的全部用法及使用时需注意的地方
一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp);其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写s[i]这样的表达式);第二个参数是参与排序的元素个数;第三个参数是单个元素的大小,推荐使用sizeof(s[0])这样的表达式;第四个参数就是让很多人觉得非常困惑的...
...调用 qsort() 对一个字符串数组排序, 但是不行。
你说的 ``字符串数组" 实际上是 ``字符指针数组"。qsort 比较函数的参数是被排序对象的指针, 在这里, 也就是字符指针的指针。然而 strcmp() 只接受字符指针。因此, 不能直接使用 strcmp()。写一个下边这样的间接比较函数:/* 通过指针比较字符串 */ int pstrcmp(const void *p1, const void ...
qsort函数对相同长度的字符串进行strcmp操作时候是如何排序的?
感觉相同的东西,位置应该没有规律,只和它在原来内存中的位置有关系。如果有要求,应该定制一个排序函数
qsort 结构体排序
qsort(s,100,sizeof(s[0]),cmp);六、对字符串进行排序 struct In { int data;char str[100];}s[100];//按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ){ return strcmp( (*(In *)a)->str , (*(In *)b)->str );} qsort(s,100,sizeof(...
...想用qsort这样的系统自带函数给一个二维数组的某一横行排序怎么做...
要达到问题中的效果,需要在第一个参数传入数据所在行的首地址,第二个参数传入一行中元素的个数,第三行传入每个元素占用的空间,第四个传入自定义的比较函数指针(函数名)。下面就以一个3行4列整型数组a[3][4],对其第二行(a[1])进行升序排序为例,写一个代码,辅助理解。include <stdio.h>...
qsort具体用法
2、对字符串排序:int Comp(const void *p1,const void *p2){ return strcmp((char *)p2,(char *)p1);} int main(){ char a[MAX1][MAX2];initial(a);qsort(a,lenth,sizeof(a[0]),Comp);//lenth 为数组a的长度 3、按结构体中某个关键字排序(对结构体一级排序):struct Node {...
qsort函数使用方法总结(详细全面+代码)
qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), compare);在这里,arr是二维字符串数组,qsort会遍历每个元素的首元素,将其视为char *进行比较。对于整型二维数组的K个最近点问题,需要先计算每个点到原点的距离,然后使用compar函数进行排序。这里不再赘述,但记住调整compar函数以适应...
qsort对vector排序的问题
少年,你舍近求远了 qsort不是和vector配套使用的,所以不能用vector的iterator。qsort适合用来排序原生的数组。用qsort(&rooms[0],……)可以,是因为vector的内部实现是一个整块的内存,&rooms[0]相当于取出了这块内存的首地址。用sort(rooms.begin(), ...)才是STL的做法 ...
c语言 qsort
qsort 要求提供一个 比较函数,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字 ,比如有一个结构 struct num { int a;int b;};然后我有一个num 类型的数组, num dddd[100];我想给 dddd这个数组排序,那怎么办? 我想让 a +b 最大的num元素排在...
qsort函数使用方法总结(详细全面+代码)
排序二维数组实质上是对第二维度存放的字符串排序。调用`qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), compare)`时,第二个参数表示待排元素数量(5个),第三个参数为元素大小(16)。将`arr`传入`qsort`,理解为指向数组第一个元素的指针。参数`arg1`和`arg2`指向`"指向字符...