whyyouhitme_ 2018-05-01 06:41 采纳率: 57.1%
浏览 961
已采纳

这样使用qsort函数对吗?为什么调用后不起作用

#include
#include
#include
#define WORD_LEN 20
#define P_NUM 10
int read_line(char s[],int n);
int compare_str(const void *p,const void *q);
int main(void)
{
char word[WORD_LEN];
char *str[P_NUM];
int n,i=0,num_remind=0;
for(;;){
if(num_remind==P_NUM){
printf("No space left");
break;
}
printf("Enter word:");
n=read_line(word,WORD_LEN);
if(n==0)
break;

str[i]=malloc(strlen(word)+1);
if(str[i]==NULL){
    printf("No space left.\n");break;
}
strcpy(str[i],word);
num_remind++;i++;
}
qsort(str,num_remind,strlen(word),compare_str);
//str是待排序数组
//num_remind是数组元素的个数
//strlen(word)是元素(存放字符串的字符数组)的大小
//compare_str是比较函数
for(i=0;i<num_remind;i++)
printf(" %s\n",str[i]);
return 0;

}

int read_line(char s[],int n)
{
int ch,i=0;
while((ch=getchar())!='\n')
if(i<n)
s[i++]=ch;
s[i]='\0';
return i;
}
int compare_str(const void *p,const void *q)
{
return strcmp((const char *)p,(const char *)q);
}

输出后还是原顺序

  • 写回答

3条回答

  • tangchuxian080 2018-05-01 08:29
    关注

    功 能: 使用快速排序例程进行排序

    头文件:stdlib.h

    用 法:_CRTIMP void __cdecl qsort(void*, size_t, size_t,int (*)(const void*, const void*));[1]

    参数: 1 待排序数组首地址

    2 数组中待排序元素数量

    3 各元素的占用空间大小

    4 指向函数的指针,用于确定排序的顺序

    你用的qsort(str,num_remind,strlen(word),compare_str);
    应该是给字符串排序吧
    那么第三个参数应该是字符串首地址的大小,不是strlen(word)应该是sizeof(char*)吧

    不知道对不对,你试下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面