我的 `qsort` 程序没有按预期工作
My `qsort` program is not working as expected
我在使用 qsort 时遇到了一些问题。我搜索了不同的文档,但不明白为什么我的 qsort 不起作用!
代码如下:
char** suffixArray = makeSuffixArray(string, strlen(string));
qsort(*suffixArray, strlen(string) + 1, strlen(string) + 1, (int(*)(const void*, const void*))strcmp);
备注:
makeSuffixArray 生成单词 "bananas" 所有可能后缀的数组。
然后 Qsort 应该按字典顺序对这些进行排序。
函数 makeSuffixArray 确实有效,我在调试器中反复检查过它。
提前致谢。
编辑:想要 post 调试器中后缀数组的图片,但没有得到它的评价:^)。
您没有 post makeSuffixArray()
的代码。假设它分配了一个 char*
的数组,长度比字符数多 1,因为包括空后缀,确实有一个可能的后缀比字符数多一个。
您的代码有 3 个问题:
- 您将数组的第一个元素传递给
qsort
而不是指向字符串数组本身的指针。
- 数组元素大小为
sizeof(*suffixArray)
。您错误地将 strlen(string)+1
作为第三个参数传递给 qsort
.
- 将
strcmp
转换为不同的原型是不可移植的。此外,比较函数接收指向数组条目的指针,而不是它们的值,因此 strcmp
是完全不合适的。您必须定义一个特定的函数,如下所示。
这是修改后的版本:
int scmp(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b);
}
char **suffixArray = makeSuffixArray(string, strlen(string));
qsort(suffixArray, strlen(string) + 1, sizeof(*suffixArray), scmp);
我在使用 qsort 时遇到了一些问题。我搜索了不同的文档,但不明白为什么我的 qsort 不起作用!
代码如下:
char** suffixArray = makeSuffixArray(string, strlen(string));
qsort(*suffixArray, strlen(string) + 1, strlen(string) + 1, (int(*)(const void*, const void*))strcmp);
备注: makeSuffixArray 生成单词 "bananas" 所有可能后缀的数组。 然后 Qsort 应该按字典顺序对这些进行排序。
函数 makeSuffixArray 确实有效,我在调试器中反复检查过它。
提前致谢。
编辑:想要 post 调试器中后缀数组的图片,但没有得到它的评价:^)。
您没有 post makeSuffixArray()
的代码。假设它分配了一个 char*
的数组,长度比字符数多 1,因为包括空后缀,确实有一个可能的后缀比字符数多一个。
您的代码有 3 个问题:
- 您将数组的第一个元素传递给
qsort
而不是指向字符串数组本身的指针。 - 数组元素大小为
sizeof(*suffixArray)
。您错误地将strlen(string)+1
作为第三个参数传递给qsort
. - 将
strcmp
转换为不同的原型是不可移植的。此外,比较函数接收指向数组条目的指针,而不是它们的值,因此strcmp
是完全不合适的。您必须定义一个特定的函数,如下所示。
这是修改后的版本:
int scmp(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b);
}
char **suffixArray = makeSuffixArray(string, strlen(string));
qsort(suffixArray, strlen(string) + 1, sizeof(*suffixArray), scmp);