簡體   English   中英

如何按字母順序對指針數組進行排序,然后使用qsort?

[英]How to sort an array of pointers in alphabetical order, and then use qsort?

我正在嘗試編寫一個函數,在其中我對wptrs內的指針進行排序, wptrs是指向另一個數組中的字符串的指針數組。 我要挑戰自己不要在本練習中使用string.h,因為我想了解排序算法如何在C中工作。但是我正在使用qsort() ,但是我正嘗試為其編寫比較函數mycharptrcompare()

我研究了strcmp()工作方式,並嘗試使用mycharptrcompare()來模仿。 但是,我注意到strcmp()期望使用char *,而mycharptrcompare()函數期望使用char **的mycharptrcompare() 我已經編寫了一種稱為dumpwptrs的方法,以向我展示內容及其在wptrs中的組織wptrs 到目前為止,我有以下代碼:

更新:

我也嘗試過:

int mycharptrcompare(const void *a, const void *b)
{
  //Need to convert a void * to a more specific type to dereference
  const char *aPtr = a;
  const char *bPtr = b;
  const char **pa = &aPtr;
  const char **pb = &bPtr;

  while (*pa && *pa == *pb) {
    pa++;
    pb++;
  }
  return *pa - *pb;
}

我得到的輸出是:

(空值)

跳躍

世界

藍色

這仍然是不正確的,因為我的列表應按字母順序排序,並且第一個輸入(單詞“ hello”)尚未被讀入。

僅供參考,這里是qsort()的示例用法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp(const void *a, const void *b)
{
    const char **pa = a;
    const char **pb = b;
    return strcmp(*pa, *pb);
}

int main(void)
{
    char *wptrs[] = { "hello", "jumps", "world", "is", "dog", "blue" };
    size_t len = sizeof wptrs / sizeof wptrs[0];
    qsort(wptrs, len, sizeof wptrs[0], cmp);

    for(size_t i = 0; i < len; i++) {
        printf("%s\n", wptrs[i]);
    }
    return 0;
}

程序輸出:

blue
dog
hello
is
jumps
world

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM