用C排序二维数组字符串

时间:2012-10-24 13:47:16

标签: c arrays sorting multidimensional-array

我需要在C中对字符串数组进行排序。以下是我使用2D数组的方法:

首先,我声明大小为115的数组,数组的每个元素的容量为10个字符: char stock[115][10];

然后,只要用户输入我需要放入此数组的单词,我就会将其存储为:

strcpy(stock[r],msg);
r++;

其中 msg 是用于存储用户输入的临时变量, r 是最初分配给0的整数。

现在问题是我需要打印 Stock 数组。我需要输出按字母顺序排列。我尝试使用qsort但无法使其工作,可能由于缺乏对qsort的理解,我没有完全正确地实现它。

请建议一种方法对 STOCK 数组进行排序,以便我可以打印预期的输出。

另请注意,Stock Array的常规打印工作正常,即,如果我尝试按照存储顺序打印数组,它可以正常工作。这是我需要帮助的分类。

谢谢:)

Edit01:我在这里尝试使用的QSORT方法是:

//Call Qsort Method
qsort(stock, r, sizeof(stock[0]), comp);



//Function to Compare two Strings - Used in the QSORT Method
int comp(const void *s1, const void *s2)
{
    return (strcmp(*(char **)s1, *(char **)s2));
}

1 个答案:

答案 0 :(得分:7)

以下是qsort的原型:

void qsort(void *base, size_t nmemb, size_t size, 
           int(*compar)(const void *, const void *));
  • base是您的数组(此处为stock)。
  • nmemb是数组成员的数量(r此处)。
  • size是元素的大小(10此处)。

compar函数应比较两个字符串,如果第一个参数被认为分别小于,等于或大于第二个,则返回小于,等于或大于零的整数。 strcmp可以为您完成。

#include <string.h>

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

qsort(stock, r, 10, cmp);