[英]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.