题解 | #字符串排序#
字符串排序
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;
}

查看25道真题和解析