题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
// #include<stdio.h> // #include<string.h> // int main() // { // int n; // char str[1000][100]; // char *ptstr[1000];//c语言中,char*表示字符指针类型,当其指向一个字符串的第一个元素时,它就可以表示这个字符串。 // scanf("%d",&n); // int c; // getchar(); // for (int i=0;i<n;i++) // { // gets(&str[i][100]); // ptstr[i]=&str[i][100]; // } // for (int j=0;j<n-1;j++) // { // for(int k=j+1;k<n;k++) // { // if (strcmp(ptstr[j],ptstr[k])>0)//参数 str1 和 str2 是参与比较的两个字符串。 // { // char*temp; //如果返回值 > 0,则表示 str2 小于 str1。 // temp=ptstr[k]; // ptstr[k]=ptstr[j]; // ptstr[j]=temp; // } // } // } // for (int ii=0;ii<n;ii++) // { // puts(ptstr[ii]); // } // return 0; // } #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);//malloc的返回值是一个指针,指向一段可用内存的起始位置, 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]); } }