题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
字符串排序:C语言解法
#include <stdio.h>
//在这里进行变型,比较的数组是个指针数组,需要对指针指向的内容进行比较
int cmp(const char** a, const char** b){
return strcmp((char *)*a, (char *)*b);
}
int main(){
int num = 0;
scanf("%d\n",&num);
char** str = (char**)malloc(sizeof(char*) * (num)); //指向二维数组,一维数组指针的二级指针
char* p = (char*)malloc(sizeof(char) * (num) * 101); //为二维数组的每个元素分配空间
memset(p, sizeof(char) * (num) * 101, 0);
for(int i=0; i<num; i++){
scanf("%s\n",p+i*101);
str[i] = p+i*101; //str[i] 是二维数组的一维数组指针 str[i] = *(str + i)
}
//利用strcmp比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。
//strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,
//若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
qsort(str, num, sizeof(char *), cmp);
for(int j=0; j<num; j++){
printf("%s\n",str[j]);
}
}