栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Andy‘s First Dictionary C++ STL set应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap

Andy‘s First Dictionary C++ STL set应用

目录

题目描述

思路分析

代码


题目描述

原文:

Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him, as the number of words that he knows is, well, not quite enough. Instead of thinking up all the words himself, he has a briliant idea. From his bookshelf he would pick one of his favourite story books, from which he would copy out all the distinct words. By arranging the words in alphabetical order, he is done! Of course, it is a really time-consuming job, and this is where a computer program is helpful. You are asked to write a program that lists all the different words in the input text. In this problem, a word is defined as a consecutive sequence of alphabets, in upper and/or lower case. Words with only one letter are also to be considered. Furthermore, your program must be CaSe InSeNsItIvE. For example, words like “Apple”, “apple” or “APPLE” must be considered the same.

简单来说:输入一个文本,找出所有不同的单词(连续的字母序列)按照字典序从小到大输出。单词不区分大小写。

Input

The input file is a text with no more than 5000 lines. An input line has at most 200 characters. Input is terminated by EOF.

Output

Your output should give a list of different words that appears in the input text, one in a line. The words should all be in lower case, sorted in alphabetical order. You can be sure that he number of distinct words in the text does not exceed 5000.

Sample Input

Adventures in Disneyland
Two blonds were going to Disneyland when they came to a fork in the road. The sign read: "Disneyland Left."
So they went home.

Sample Output

a
adventures
blonds
came
disneyland
fork
going
home
in
left
read
road
sign
so
the
they
to
two
went
were
when

思路分析

主要是通过set的自动排序来完成,当然我们首先得把单词分离出来再装进set里面。

一个英文文本里面空格隔开的会含有一个单词,但是同时也会有其他字符像 " , . !之类的也是会包含在字符串中,因此我们需要转变一下这些字符串,判断单个字符串中的单个字符是不是字母,不是就把它变成空格,是就把它变成小写字母,因为输入是全小写的,那为什么要变成空格呢,因为可以通过stringstream去掉空格,stringstream是一个神奇的东西,可以把空格当成分割。

set自己会完成集合的工作,不会有重复的元素,会自动升序排序,最后输入元素的时候,我们只需要通过迭代器来输入就可以了。

为了自己方便自己调试,我会加入一行代码来让系统知道我数据输入完了:

if(temp=="####")break;

详情见注释^_^ 

代码
#include
#include
#include
#include
using namespace std;
int main() {
	set dictionary;//创建一个集合 
	string temp;//创建一个string类字符串 
	while(cin>>temp){//挨个读取字符串 
		for(auto & i :temp)//提取单词
		if(isalpha(i))
		i=tolower(i);//把大写变小写
		else i=' ';//非字母变空格 
		stringstream turn(temp);//创建stringstream类对象,去掉字符串的空格 
		turn>>temp;//从stringstream类对象里面提取字符串 
		dictionary.insert(temp);//装进集合里面去 
	}
	for(set::iterator i=dictionary.begin();i!=dictionary.end();i++)//用迭代器输出集合里面的元素 
	cout<<*i<

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1041272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号