用qsort对字符串数组排序需要注意的几个问题

 我来答
司马刀剑
高粉答主

2018-06-11 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7541万
展开全部
声明一个字符串指针数组存放每个字符串的首地址,调用库函数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;}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式