gpt4 book ai didi

c - 二维数组 : Alphabetical Sorting in C

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:26 25 4
gpt4 key购买 nike

char **items

这就是我创建数组的方式。 items[0] 是第一个字符串,items[1] 是第二个,依此类推。我想按字母顺序对这些字符串进行排序,例如:

c.bmp (items[0])
b.bmp (items[1])
a.bmp (items[2])

变成:

a.bmp (items[0])
b.bmp (items[1])
c.bmp (items[2])

但是当我执行 qsort 时:(其中 i 是字符串的数量)

qsort(items, i, (sizeof(char *)), cmp);

它并没有按顺序结束。顺序发生变化,但不是按字母顺序排列。

这是我的cmp 函数:

int cmp(const void *a, const void *b) { 
char** p1 = (char**) a;

char** p2 = (char**) b;

if( p1[1] > p2[1])
{
return -1;
}
else if (p1[1] < p2[1])
{
return 1;
}
else
{
return 0;
}
}

最佳答案

您的 cmp 函数不比较字符串,只比较它们在内存中的位置(更糟糕的是 - 它们之后的内容在内存中的位置,即 p1[1] p1[0],当数组的最后一个元素参与比较时也会产生未定义的行为)。

在取消引用传递到代码中的指针后,您可以通过在 cmp 中使用 strcmp 来解决此问题:

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

关于c - 二维数组 : Alphabetical Sorting in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860406/

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