3

我需要在 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));
}
4

1 回答 1

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);
于 2012-10-24T13:53:47.677 回答