whyyouhitme_
whyyouhitme_
采纳率65.7%
2018-05-01 06:41

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

5
已采纳

#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 tangchuxian080 3年前

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

    头文件: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*)吧

    不知道对不对,你试下

    点赞 评论 复制链接分享
  • imlym Imlym 3年前

    第三个参数应该是 sizeof(char)

    点赞 评论 复制链接分享
  • ZaiLuShang2121 ontheway-xx 3年前

    qsort(str,num_remind,sizeof(char*),compare_str);

    int compare_str(const void p,const void *q)
    {
    return strcmp(
    (char * const *) p, * (char * const *) q);
    }

    
    

    看下man手册,上面有完整的例子

    点赞 评论 复制链接分享