题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
本来想用二维字符指针初始化,结果发现总是内存超限。后来考虑用动态数组,即输入多少申请多大内存的空间存储字符串。 1.定义char** dic,动态申请内存大小n*100*sizeof(char); 2.定义一个缓冲字符数组,大小为100; 3.每读取一个字符串存入temp中,动态申请内存大小sizeof(temp); 4.将缓冲字符数组的内容拷贝到dic[i]中,同时将temp数组归零。 5.使用qsort函数排序。 6.比较函数的形参传入为char**。 #include<stdio.h> #include<stdlib.h> #include<string.h> int cmp_word(const void**a,const void**b) { return strcmp(*(char**)a, *(char**)b); } int main() { int n; scanf("%d",&n); char** dic; dic=(char**)malloc(n*100*sizeof(char)); char temp[100]={0}; int i=0; while(scanf("%s\n",temp)!=EOF) { if(i==n) break; dic[i]=(char*)malloc(sizeof(temp)); strcpy(dic[i],temp); memset(temp,'0',99); i++; } qsort(dic,n,sizeof(char*),cmp_word); for(i=0;i<n;i++) printf("%s\n",dic[i]); return 0; }