gpt4 book ai didi

c - 如何通过 qsort 对 C 中的 3D 字符数组进行排序

转载 作者:行者123 更新时间:2023-11-30 18:13:58 25 4
gpt4 key购买 nike

我在使用 C 语言中的 qsort() 对 3D 字符数组进行排序时遇到问题。我想按字符串的长度对数组进行排序。

我找到了用于对二维数组进行排序的代码:

int compare(const void *name1, const void *name2)
{
const char *name1_ = *(const char **)name1;
const char *name2_ = *(const char **)name2;

return strcmp(name1_, name2_);
}

我将代码修改为:

int compare(const void *name1, const void *name2)
{

const char *name1_ = *(const char ***)name1;
const char *name2_ = *(const char ***)name2;

if(strlen(name1_)>strlen(name2_))
{
return 1;
}

if(strlen(name1_)<strlen(name2_))
{
return -1;
}
else
{
return 0;
}
}

但这不起作用,我不知道该怎么做。

例如。我想像这样对数组进行排序:

char * array1 [][2] = {
{ "murderer", "termination specialist" },
{ "failure", "non-traditional success" },
{ "specialist", "person with certified level of knowledge" },
{ "incorrect answer", "alternative answer" }
};

此格式:

char * array1 [][2] = {
{ "incorrect answer", "alternative answer" },
{ "specialist", "person with certified level of knowledge" },
{ "murderer", "termination specialist" },
{ "failure", "non-traditional success" }
};

最佳答案

在不知道您想要引入的排序规则的情况下,我可以在您的实现中看到 C 指针问题。如果代码成功用于 2D 案例:

const char name1_ = *(const char **)name1;

我的猜测是 3D 案例的类型转换不正确:

const char name1_ = *(const char ***)name1;

因为这应该是

const char name1_ = **(const char ***)name1;

因为在 3D 情况下,您需要取消引用指针两次。

关于c - 如何通过 qsort 对 C 中的 3D 字符数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com