【问题标题】:use qsort with comparator function使用带有比较器功能的 qsort
【发布时间】:2011-12-02 23:26:49
【问题描述】:

我从 c 库中知道 qsort,我已经用字符和整数实现了它(从 const void * 形式转换为相关形式),但现在我正在实现代码,它给我在给定句子中最长重复的代码是简单的比较函数

int pstrcmp(char **p,char **q){
    return strcmp(*p,*q);

}

我想像这样在 qsort 中使用它

qsort(a,n,sizeof(char *),pstrcmp);(a is array of strings)

当我直接写时,它写它不兼容并且儿子,显示错误,请帮助我更正它

错误是这样的

2 IntelliSense:“int (*)(char **p, char **q)”类型的参数是 与“int (__cdecl *)(const void *, const void *)" c:\users\datuashvili\documents\visual studio 2010\projects\duplicate_strings\duplicate_strings\duplicates_strings.cpp 32 27 duplicate_strings

【问题讨论】:

  • 在 C++ 中使用 qsort 而不是 std::sort 有什么原因吗?
  • std::sort from <algorithm>bool pstrcmp(const char* a, const char* b) { return strcmp(a,b) < 0;} 一起使用要简单得多。使用std::string 甚至更简单,您根本不必实现比较功能。

标签: c++ qsort


【解决方案1】:

您需要为您的比较器函数提供正确的函数签名,然后在内部进行转换,例如

int pstrcmp(const void * p, const void * q)
{
    const char **ps = (const char **)p;
    const char **qs = (const char **)q;

    return strcmp(*ps, *qs);
}

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 2013-11-02
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2019-01-13
    • 2013-02-26
    相关资源
    最近更新 更多