【发布时间】:2015-02-17 00:06:15
【问题描述】:
我在让 qsort 用于字符串数组(确切地说是 char *)时遇到问题。我创建了一个我认为应该适用于 qsort 要求的比较函数,但它似乎根本不起作用。我还需要它来处理空白字符和空白字符串(例如“”)。任何关于我做错的方向或说明将不胜感激。
我的相关源码:
int compareAlphabetically(const void * a,const void * b);
void sortStringArray(char * * arrString, int len){
int size = sizeof(arrString) / sizeof(char *);
if(*arrString != NULL && len > 1)
qsort(arrString, size, sizeof(char *), compareAlphabetically);
}
int compareAlphabetically(const void * a, const void * b)
{
const char *a_p = *(const char **) a;
const char *b_p = *(const char **) b;
return strcmp(a_p,b_p);
}
函数定义是(并且应该保持不变):
/**
* Takes an array of C-strings, and sorts them alphabetically, ascending.
*
* arrString: an array of strings
* len: length of the array 'arrString'
*
* For example,
* int len;
* char * * strArr = explode("lady beatle brew", " ", &len);
* sortStringArray(strArr, len);
* char * str = implode(strArr, len, " ");
* printf("%s\n", str); // beatle brew lady
*
* Hint: use the <stdlib.h> function "qsort"
* Hint: you must _clearly_ understand the typecasts.
*/
void sortStringArray(char * * arrString, int len);
【问题讨论】:
-
我认为这可能与我对 qsort 工作原理的误解或类型转换错误有关
-
真正的问题是什么?您能否提供一些与您期望的排序不同的示例输入?
-
这不是排序,我认为这是由于空格是问题,但后来发生了各种情况。请参阅chux答案。他捡起来了。
标签: c arrays string strcmp qsort