首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中的string_comparator

C语言中的string_comparator
EN

Stack Overflow用户
提问于 2012-12-07 14:18:20
回答 1查看 1.5K关注 0票数 0

好的,所以我需要用C编写几个相当长的字符串,所以我对自己说:“为什么,你最好使用那个方便的花哨的qsort函数!最好为它写一个string_comparator!”

所以我当然喜欢,她就是这样的:

代码语言:javascript
复制
int string_comparator(const void* el1, const void* el2) {

char* x = (char*) el1;
char* y = (char*) el2;

int str_len = strlen(x);
int i = 0;
for (; i < str_len; i++) {

    //when there are non-equal chars
    if (x[i] != y[i]) {
        break;
    }
}

return x[i] - y[i];
}

因此,我当然会将我方便的string_comparator函数传递给C qsort函数:

代码语言:javascript
复制
qsort(list.words, list.num_words, sizeof(char*), string_comparator);

list是一个包含char** (单词)和it的结构,it表示它包含的单词数(例如num_words)

现在我遇到了问题,我的列表没有像我希望的那样按字母顺序排序!我在我的比较器中放了一堆printf语句,每次它都会打印出这些字符串的垃圾值,所以我相当确定这就是问题所在。但是为什么会有这样的问题呢?我以前用过qsort (从来没有对words..just排序字符进行排序),据我所知,这应该是可行的……这里出了什么问题?

非常感谢大家的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 14:19:43

这是使用qsort()时的常见错误。以下是更正:

代码语言:javascript
复制
char *x = *(char **) el1;
char *y = *(char **) el2;

因为list.words的类型是char **,而不是char *,对吧?

qsort()的另一个示例

下面是如何使用qsort()int数组进行排序

代码语言:javascript
复制
int int_comparator(const void *el1, const void *el2)
{
    int x = *(int *) el1;
    int y = *(int *) el2;
    return x - y;
}

void sort_ints(int *a, size_t n)
{
    // these two lines are both "correct"
    // the second line is more "obviously correct"

    // qsort(a, n, sizeof(int), int_comparator);
    qsort(a, n, sizeof(*a), int_comparator);
}

现在,如果您使用char *替换int,则必须使用char **替换int *

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13757952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档