您的位置:首页 > 其它

UVa-10815 Andy's First Dictionary

2015-08-18 14:00 239 查看
#include <iostream>
#include <string>
#include <sstream>
#include <set>

using namespace std;

set<string> dict;
string str, buf;

int main()
{
while(cin >> str)
{
for(int i = 0; i < (int)str.length(); i ++)
if(isalpha(str[i]))
str[i] = tolower(str[i]);
else
str[i] = ' ';
stringstream word(str);
while(word >> buf)
dict.insert(buf);
}
for(set<string>::iterator it = dict.begin(); it != dict.end(); it ++)
cout << *it << endl;
return 0;
}

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

题解:好像是string已经定义了“小于”运算符,set只是用来保存单词(集合中不存在相同的元素(即删除同单词))。while(cin >> str)只有遇到EOF才停止输出,刚开始一直不清楚为什么没有输出。windows下按 ctrl + z + 回车 就有输出了。中间还有些语句不能理解。例如 dict.insert(buf),应该是将str以流的形式输入buf。set<string>::iterator 是迭代器,类似于指针。但是具体是用来做什么的并不十分清楚。

编辑后 set<string> 配上dict.insert(buf)则可以进行插入排序。stringstream word(str)的作用应该是滤去空格(如果删去这语句应该也是可以的,不过空格将会一起被打印出来)。所以,string 定义的东西比较多。cin >> str 是读入一整个单词,遇到空格或者回车 重新以0开始重新读入单词。最后所有的单词都录入可dict。(word buf都只是中间的媒介)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: