Cpp环境【Uva10815】【Vijos2785】安迪的第一本字典

博客介绍了如何使用C++的set和string处理Uva10815和Vijos2785问题,即从文本中找出所有不同的单词并按字典序排序。通过将输入的单词转为小写并去除非字母字符,利用set的自动去重功能,最后遍历输出排序后的单词。
【问题描述】  

  输入一段文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出。输入的单词不区分大小写,且保证至少包含有一个单词。

【输入格式】  

  一段不超过500行的文本,每行包含的字符个数不超过1000个字符。

【输出格式】  

  需要输出输入文本中不同的单词,每个单词占一行,单词的所有字母都是小写字母,按字典序排列。

【输入样例】  

Adventures in Disneyland

Two blondes were going to Disneyland when they came to a fork in the road. The sign read: “Disneyland Left.”

So they went home.

【输出样例】  

a adventures blondes came disneyland fork going home in left read road sign so the they to two went were when
(每个单词应该逐行打印出,为节省篇幅此处用空格隔开。)

【思路梳理】

显然这个题需要对所有的输入单词进行去重和排序,所以推荐使用的是STL里面的set或者是map容器,按照字典序由小到大依次排列。涉及到不少对于字符的处理,所以可以考虑采用的是C++提供的新的string类型,虽然有点慢但是对于这个题的数据范围已经绰绰有余。它直接支持流式读写,也自带许多非常方便的函数和运算符,直接调用即可。
回到题目上来看,string已经定义了小于运算符<,所以我们先将单词的所有大写字母全部转化为小写字母、非字母全部转化为空格然后忽略掉,直接使用set保存单词,最后用迭代器依次输出即可。
题目没有什么太多的技巧,主要还是为了考察set的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值