【发布时间】:2017-09-18 00:43:54
【问题描述】:
我试图了解这个比较器函数stringAsInt(const void *pLeft, const void *pRight)的前几行发生了什么
- 所以参数是一些东西的常量指针。然后在接下来的两行中,我们将 void 转换为
(const char**)为什么将其转换为指针的指针?另外,这两行到底是怎么回事? - 在
main()函数中调用qsort()时,为什么没有参数传给stringAsInt()?stringAsInt()怎么知道pLeft和pRight是什么? - 为什么
a被设置为指针的指针?一个标准的数组还不够吗?
-
int stringAsInt(const void *pLeft, const void *pRight) {
const char *left = *(const char**)pLeft;
const char *right = *(const char**)pRight;
int leftLen = (int)strlen(left);
int rightLen = (int)strlen(right);
if (leftLen != rightLen) {
return leftLen - rightLen;
} else {
return strcmp(left, right);
}
}
int main() {
int n;
scanf("%d", &n);
char buffer[1000000 + 1];
char **a = malloc(sizeof(char*) * (size_t)n);
for (int i = 0; i < n; i++) {
scanf("%1000000s", buffer);
a[i] = malloc(sizeof(char) * (strlen(buffer) + 1));
strcpy(a[i], buffer);
}
qsort(a, (size_t)n, sizeof(a[0]), stringAsInt);
for (int i = 0; i < n; i++) {
printf("%s\n", a[i]);
free(a[i]);
}
free(a);
return 0;
}
【问题讨论】:
-
char buffer[1000000 + 1];是真的吗? -
@Brandon - 是的,这是 Hackerrank 的一个问题。所以我最初想实现一个二叉搜索树,但它一直超时。 hackerrank.com/challenges/big-sorting/problem
-
有无数个重复项。你有 6687 名代表,我想你现在应该知道要先搜索他们。
-
至于3,是你写的。你本可以使用
char *a[],但决定使用malloc。
标签: c pointers quicksort qsort