解决问题单词数
要求:
1、去除重复的单词(STL中的set解决)
2、可能有多个连续的空格
解决多个连续的空格比较麻烦,但 也不是很难。可以利用istringstream解决,及其简单。
今天看别人c++源码,看到一个比较有用的c++输入输出控制类,特此记录下;
源码:
#include<iostream>
#include<set>
#include<sstream> //引入头文件
using namespace std;
int main(){
string s;
while(getline(cin,s) && s != "#"){
istringstream sin(s);
set<string> q;
string w;
while(sin>>w)
q.insert(w);
cout<<q.size()<<endl;
}
return 0;
}
自己解决问题的代码;
#include<iostream>
#include<string>
#include<set>
using namespace std;
int main(){
string s;
while(getline(cin,s) && s[0] != '#'){
set<string> q;
string str;
for(string::iterator it = s.begin(); it != s.end();++it){
if(*it != ' ') str += *it;
else{
if(!str.empty())
q.insert(str);
str = "";
}
}
if(!str.empty())
q.insert(str);
cout<<q.size()<<endl;
q.clear();
}
return 0;
}
尽管都能AC,但第一个代码明显简介易懂。
C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含这个头文件。
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。
strstream类同时可以支持C风格的串流的输入输出操作。
istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符。
istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。
所以在处理有多个空格的字符串的时候特别好用。