描述
给定 n 个字符串,请对 n 个字符串按照字典序排列。
数据范围: 1 \le n \le 1000 \1≤n≤1000 ,字符串长度满足 1 \le len \le 100 \1≤len≤100
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
示例1
输入:
9 cap to cat card two too up boat boot复制
输出:
boat boot cap card cat to too two up代码:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
//以下是Senky的代码:
int cmp(const char** p1, const char** p2)
{
return strcmp(*p1, *p2);//升序排列即字典顺序
}
int main() {
int n;
scanf("%d\n", &n);//手动输入字符串个数
char* b;
char** a;
int i = 0;
a = (char**)malloc(n * sizeof(char*));//这里有指向(n个char*)的指针a
for (i = 0; i < n; i++)
{
b = (char*)malloc(101 * sizeof(char));//这里有指向(大小为100个char)的指针b
gets(b);//获取一行字符串
a[i] = b;//将字符串的指针存在a中
}
qsort(a, n, sizeof(char*), cmp);//快速排序
for (i = 0; i < n; i++)
{
printf("%s\n", a[i]);//输出字符串
}
for (i = 0; i < n; i++)
{
free(a[i]);//释放malloc来的a
}
return 0;//编辑于2022/09/09
}
图解:
①灵活使用指针和二级指针,可以极大的减小运算内存,穷举也能做但是不够完美;
②注意for循环中malloc的内存free方式;
③当前帖子仅供自我精进、学习使用

京公网安备 11010502036488号