【问题标题】:C - Comparison function - Need explanationC - 比较函数 - 需要说明
【发布时间】:2016-05-17 02:24:27
【问题描述】:

我目前正在阅读 Engineering a Sort Function 并尝试了解以下有关比较函数的内容:

要对带有终端空字符的 len 字节字符串数组进行排序, 使用标准的字符串比较例程 strcmp: qsort(a, n, len, strcmp);

要对指向字符串的指针数组进行排序,请将 strcmp 与 另一个层次的间接性。 int pstrcmp(char **i, char **j) { return strcmp(*i, *j); }

字符串比较是明确的,但不是字符串指针数组的比较。我认为strcmp(*i, *j) 只会比较两个数组中的第一个字符串,但如果这些字符串匹配,则会返回 0 (= equality)。代码甚至不会查看位于第 2、第 3 等索引处的字符串。

这种方法真的只是比较两个数组中的第一个字符串还是我遗漏了什么?

【问题讨论】:

  • 什么是 pstrcmp?我不知道这样的功能。
  • 我不清楚这两种情况下数组的类型是什么
  • @VladfromMoscow 他展示了函数的定义

标签: c arrays string string-comparison


【解决方案1】:

我认为 strcmp(*i, *j) 只会比较两个数组中的第一个字符串,但如果这些字符串匹配,则会返回 0(= 相等)。代码甚至不会查看位于第 2、第 3 等索引处的字符串。

你误读了这是干什么用的。 “对一个数组指向字符串的指针进行排序......”。这是关于排序单个数组,不超过一个数组。

【讨论】:

  • 哦,谢谢,我真的看错了。我以为是对一个字符串数组的数组进行排序。
【解决方案2】:
int cmp(const void* a, const void* b)
{
    const char* s1 = (const char*)*a;
    const char* s2 = (const char*)*b;

   return strcmp(s1, s2);
}

cmp 函数获取指向两个字符串(char*) 的指针,qsort 希望比较的不是整个字符串数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2014-10-08
    • 1970-01-01
    • 2023-04-01
    • 2012-07-20
    相关资源
    最近更新 更多