安迪的第一个字典(Andy's First Dictionary,UVa 10815)
Description
Andy, , 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 lines. An input line has at most characters. Input is terminated by EOF.
Output
Your output should give a list of different words that appears .
Sample Input
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.
Sample Output
a adventures blondes came disneyland fork going home in left read road sign so the they to two went were when
| 1.中文翻译 |
大体的中文意思就是:输入一个文本,找出所有不同的单词(连续的字母序列),按字典序列从小到大输出。单词不区分大小写,输入输出和上面一样。
| 2.分析 |
这个题比较简单,我学习的是《算法竞赛入门经典》这本书的代码。
1.学会运用set容器;(有个小知识点,set容器,元素只能出现一次,并且插入可以从小到大排序)
2.学习字符函数库中常用的函数
3.学会stringstream(可参考这篇博文:http://blog.csdn.net/xw20084898/article/details/21939811)
4.最后运行记得是 在空行 ctrl+z +回车。(至于为什么,参考博文:http://blog.csdn.net/kevin_ut/article/details/8576740)
| 3.说明 |
set是一个集合 和康托前辈的一样 集合中的元素不重复 且集合中的元素是有序的(自动有序化) TY菌介绍说其内部实质是一个平衡树
set不是数组 只能通过迭代器(iterator)把里面的元素倒出来 迭代器相当于是指针 扫描的是地址 因此输出的时候需要用*variation
| 4.声明 |
需要用到头文件set
set<string> dict; 建立一个集合 其名为dict 基类型是string
| 5.常用函数 |
dict.begin() dict.end()返回集合最初和最后的元素的地址
这是写这个例题用到的
| 6.代码 |
#include<iostream>
#include<string>
#include<set>
#include<sstream>
using namespace std;
set<string> dict;//set up a set called dict-short for dictionary,and it's based on string type;
int main(){
string s,buf;
while (cin>>s){
;i<s.length();i++)
if (isalpha(s[i])) s[i]=tolower(s[i]);//if it's an letter,turn it lowercase.Others turn space and use stringstream to leave it out=ignore it
else s[i]=' ';
stringstream ss(s);
while (ss>>buf) dict.insert(buf);//insert it into the set which is already in order,TYkon said it's a balanced tree inside
}
for (set<string>::iterator it=dict.begin();it!=dict.end();++it)//iterator just like a point,scan it from beginning to end and output
cout<<*it<<endl;//NOTICE output by point
;
}
还是英文注释不过看懂应该问题不大
isalpha()判断是否是字母 如果是就用头tolower()转换成小写 否则就转为空格 这样是为了字符串流重读入的时候能够把空格去掉
特别强调一下本例中出现的迭代器
for (set<string>::iterator it=dict.begin();it!=dict.end();++it)//iterator just like a point,scan it from beginning to end and output
cout<<*it<<endl;//NOTICE output by point
迭代器iterator相当于是个类型 it是一个变量 基类型是iterator 它从开始扫到结尾的前一个【据TY菌解释 像数组一样 最后一位是没有值的 数组是一个结束标志 不知集合最后是什么】输出的时候 由于it扫描的是地址 要输出*it
这个好像用到了stl set的语法....
显然对于set我还知之甚少 还需要在今后的学习中不断掌握
今天晚上此时已是0:15,写完博客,明天上课.....
本文部分引用http://blog.csdn.net/ametake
安迪的第一个字典(Andy's First Dictionary,UVa 10815)的更多相关文章
- [STL] UVA 10815 安迪的第一个字典 Andy's First Dictionary
1.set 集合 哦....对了,set有自动按照字典序排序功能..... 声明和插入操作 #include <cstdio> #include <vector> #inclu ...
- STL语法——集合:set 安迪的第一个字典(Andy's First Dictionary,UVa 10815)
Description Andy, , has a dream - he wants to produce his very own dictionary. This is not an easy t ...
- Andy‘s First Dictionary UVA - 10815
Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for h ...
- 安迪的第一个字典 (Andy's First Dictionary,UVa10815)
题目描述: #include<iostream> #include<string> #include<set> #include<sstream> us ...
- 安迪的第一个字典(Andy's First Dictionary,Uva 10815)
输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出.单 词不区分大小写. 样例输入: Adventures in Disneyland Two blondes were goin ...
- set的运用 例题5-3 安迪的第一个字典(Andy's First Dictionary,Uva 10815)
#include<bits/stdc++.h>using namespace std;set<string> dict;int main(){ string s, buf; w ...
- 5_3 安迪的第一个字典(UVa10815)<set的使用>
Andy 是个 8 岁的孩子,他梦想要制作一本他自己的字典. 这并不是一件容易的事,因为他认识的字还不是那么多. 他并不想要自己去想这本字典中该放哪些字,他有个聪明的主意. 就是拿出他最喜欢的一本故事 ...
- UVa 10815 安迪的第一个字典
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- stl的集合set——安迪的第一个字典(摘)
set就是数学上的集合——每个元素最多只出现一次,和sort一样,自定义类型也可以构造set,但同样必须定义“小于”运算符 以下代码测试set中无重复元素 #include<iostream&g ...
随机推荐
- java类集框架(ArrayList,LinkedList,Vector区别)
主要分两个接口:collection和Map 主要分三类:集合(set).列表(List).映射(Map)1.集合:没有重复对象,没有特定排序方式2.列表:对象按索引位置排序,可以有重复对象3.映射: ...
- 使用EzHttp框架 开发基于HTTP协议的CS轻应用
框架概述 EzHttp是临时起意构思和开发的一个框架,目的在于简化CS轻应用开发过程.开发语言是C#. 普通的基于HTTP的应用开发基本上是RESTful的,客户端调用封装需要人工写代码,就算利用三方 ...
- 记一些让footer始终位于网页底部的方法
上次说把网页的头部和尾部分离出来作为一个单独的文件,所有网页共用,这样比较方便修改,然而,,,我发现某些方法里尾部会紧跟在头部后面,把内容挤在下面..而且有的页面内容少的话不能把尾部挤到最下面,所以, ...
- 关联分析:FP-Growth算法
关联分析又称关联挖掘,就是在交易数据.关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式.关联.相关性或因果结构.关联分析的一个典型例子是购物篮分析.通过发现顾客放入购物篮中不同商品 ...
- HTML5 拖放(Drag 和 Drop)功能开发——浅谈dataTransfer对象
[前言] 之前我已经为大家介绍过一篇有关HTML5中原生拖拽的相关知识了.今天为大家介绍HTML5拖拽中的其他一些关于dataTransfer对象的知识和应用. dataTransfer对象 之前的一 ...
- C++模板学习:函数模板、结构体模板、类模板
C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(i ...
- 大数相加a+b
#include<stdio.h>#include<string.h>#define MAX 1000void Add(char *a,char *b,char *result ...
- 使用命令行的方式操作hdfs
必须要用打全路径,没有相对路径的概念,或者cd的概念 打印报告: 所有的命令显示出来: 以下的操作分别是创建创建文件夹,删除文件夹,显示文件夹,可见删除文件夹只能够使用-rmr . 从本地拷贝文件到h ...
- Qt 之 入门例程(二)
本文以 Qt 中的 QtConcurrent::run() 函数为例,介绍如何将函数运行在单独的某一个线程中. 1 QtConcurrent::run() QtConcurrent 是一个命名空间, ...
- 【网站管理3】_ftp连接超时和连不上的原因
1.无法上传网页,FTP故障-提示"无法连接服务器"错误. 问题出现原因:FTP客户端程序设置问题,客户上网线路问题,ftp服务器端问题.处理方法:建议客户使用CUTPFTP软件来 ...