【问题描述】
输入一段文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出。输入的单词不区分大小写,且保证至少包含有一个单词。
【输入格式】
一段不超过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的

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

被折叠的 条评论
为什么被折叠?



