加载中...

浙江理工大学入队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;
}
2.快读写法(这道题不推荐)
点击查看代码
#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;
}
posted @ 2022-10-30 13:59  shany212  阅读(140)  评论(0编辑  收藏  举报