【问题标题】:using qsort to sort alphabetically strings of a 2d array使用 qsort 按字母顺序对二维数组的字符串进行排序
【发布时间】:2012-12-23 19:36:28
【问题描述】:

如果我有一个 4 行的数组并且每行都有一个 >=50 个字符的字符串,我如何使用 qsort 按字母顺序对 2d 数组的字符串进行排序,该数组包含字符串...我如何使用 qsort函数按字母顺序排序字符串?

我用过这个

            qsort(arr, i, 500*sizeof(arr[0]), compare);
            for (j=0; j<i; j++) {
                    printf("%s\n",arr[j]);
            }

我使用的比较器是

            int compare (const void * a, const void * b ) {
                    return strcmp(a, b);
            }

但它在尝试编译时给了我分段错误错误

【问题讨论】:

  • 你能说明你对 arr 的定义吗?
  • 你确定it gives you a segmentation fault while trying to compile?这听起来像一个编译器错误,这不太可能。您可能在运行时遇到它,而不是在编译时遇到它
  • 不应该是return strcmp(*(char **)a, *(char **)b);吗?
  • 我用字符串制作了一个二维数组,并尝试使用 qsort 命令按字母顺序对它们进行排序
  • @user1809300 我们已经知道了。尝试过我在之前的评论中提出的建议吗?

标签: c


【解决方案1】:

这样就可以了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 10
int compare (const void * a, const void * b ) {
  return strcmp(*(char **)a, *(char **)b);
}
int main () {
    char *arr[size];
    char buf[1000];
    for (int i=0;i<size;i++) {
      arr[i]=strdup (gets (buf)); // using gets is risky because it can write past buf
    }
    qsort (arr, size, sizeof (char*), compare);
    for (int i=0;i<size;i++) {
      printf ("%s\n", arr[i]);
      free (arr[i]);
    }
}

【讨论】:

  • 然而,二维数组的想法迷失了。但也没有明确定义。
最近更新 更多