输入一段文字,将其中的所有单词按照字典序输出,要求单词均以小写形式输出,不出现重复单词。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,buf;
set<string> d;
while(cin>>s){
for(int i=0;i<s.length();i++)
if(isalpha(s[i])) s[i]=tolower(s[i]);
else s[i]=' ';
stringstream ss(s);
while(ss>>buf) d.insert(buf);
}
for(set<string>::iterator it=d.begin();it!=d.end();it++)
cout<<*it<<endl;
return 0;
}
这道题出现了两个新知识点:一是stringstream,二是迭代器iterator。
1. 关于stringstream:字符串流输入输出。
常见用法:
(1)将一个字符串按照空格、制表符、回车分隔开。如:
string s="Hello world!";
stringstream ss(s);
string buf;
while(ss>>buf)
cout<<buf<<endl;
运行结果:
Hello
world!
2.关于迭代器iterator
要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。
通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。