题目
描述
给定 n 个字符串,请对 n 个字符串按照字典序排列。
数据范围: 1 <= n <= 1000 ,字符串长度满足 1 <= 100 <= 100
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
问题来了!
怎么将这n个字符串存储起来呢?
难道要定义n个数组吗?
如何进行排列呢?
字符串如何交换呢?
请思考一下!!
———————————————————————————————————————————
希望看到这的时候你已经想到了解决方案
1.存储问题:
我们可以将二维数组中的每一行存储字符串
假如不了解二维数组的可以去搜索学习一下,之后再回顾这道题
题目中也给了我们范围:
数据范围: 1 <= n <= 1000 ,字符串长度满足 1 <= 100 <= 100
看到这大家应该已经懂了接下来该怎么做了
定义一个二维数组arr[1000][101],
列的数不是100的原因是,字符串有结束标识符,所以多占一位,以免越界
好了 存储的问题已经解决了
2.排列问题
接下来要解决的问题是将每一个字符串按照字典序排列,那么就需要用到一个库函数strcmp
不了解的可以点击上方链接学习一下
之后我们遍历二维数组的行去进行比较,根据返回值判断是否需要交换
3.数据交换问题
字符串能使用的库函数还是十分方便的,为我们经常需要使用的方法提供了便利
字符串数据交换其实与整形数据交换的本质是一样的,需要一个临时变量
strcpy(temp, arr[i]); strcpy(arr[i], arr[j]); strcpy(arr[j], temp);
如果不懂其中原理画个图你可能就会恍然大悟了
以上就是整体解题步骤,对待一个问题要将问题刨析,细化为多个问题逐一击破
我推荐多写,多画,这样我们能更加了解问题,更好的解决问题
话不多说,直接上代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char arr[1000][101] = { 0 };
int n = 0;
scanf("%d", &n);
int i = 0;
int temp[101] = { 0 };
for (i = 0;i < n; i++)
{
scanf("%s", arr[i]);
}
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < n; j++)
{
if (strcmp(arr[i], arr[j])<0)
{
strcpy(temp, arr[i]);
strcpy(arr[i], arr[j]);
strcpy(arr[j], temp);
}
}
}
for (i = 0; i < n; i++)
{
printf("%s\n", arr[i]);
}
return 0;
}
假如这篇博客对你有帮助,希望能三连哦