浙江理工大学入队200题——17I
问题 I: 零基础学C/C++188——编字典
题目描述
编一本字典,给定n个单词,需要按照字典序从小到大来排序,然后输出。要求必须写一个用指针实现两个字符比较大小的函数
输入
第1行为1个整数n,表示n个单词,n<=10^5
下面n行,每行为一个单词,保证只出现小写字母
输出
输出n行,每行一个单词,是按照字典序从小到大的顺序输出
样例输入 Copy
5
aab
aa
abb
bbb
aaa
样例输出 Copy
aa
aaa
aab
abb
bbb
题解
1.注意n<=10^5,我中坑了,记得开s[100010],卡了半天的运行错误,真的难受≧ ﹏ ≦,然后才理解了为什么会出现212/2068!!!
好了,接下来我们讲解该怎么写,还记得吗?
sort为string类型提供了operator,因此我们排序字符串不用自己写cmp,是不是很方便呢?(((°▽°)八(°▽°)))
------------分割线-------------
2.我搜索了一下有其他的写法,有学长使用快读写的,可以参考一下。
上一题相似题型见>https://www.cnblogs.com/codeshany/p/zstu_200_14J.html<
代码(AC)
1.sort写法
点击查看代码
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
string s[100010];
int main()
{
long long n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i];
}
sort(s,s+n);
for(int i=0;i<n;i++)
{
printf("%s",s[i].c_str());
if(i!=n-1) printf(" \n");
}
return 0;
}
点击查看代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
inline string SR()
{ string str;
char s=getchar();
while (s==' ' || s=='\n' || s=='\r')
s=getchar();
while (s!=' ' && s!='\n' && s!='\r')
{
str+=s;
s=getchar();
}
return str;
}
inline void StringWrite(std::string str){
int i=0;
while (str[i]!='\0')
putchar(str[i]), i++;
}
int main(){
int n;
cin>>n;
string a[100000]={};
for(int i=0;i<n;i++)
{
a[i]=SR();
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
StringWrite(a[i]);
printf("\n");
}
return 0;
}
本文来自博客园,作者:shany212,转载请注明原文链接:https://www.cnblogs.com/codeshany/p/zstu_200_17I.html