【C++】stringstream
通过一道题,记录C++ stringstream 的使用。
题目描述
newcoder 上练习基本io的一道题,题目大意是说,输入有多行,每行多个单词,以空格分隔,要求对每一行的单词按字典序排列后重新输出,依然用空格分隔。
例如,输入:
a c bb
f ddd
输出:
a bb c
ddd f
解题思路
C语言可以对每一个输入的字符做判断,手动分割字符串;C++可以考虑按行输入之后,用 stringstream 来再次分割字符串。
按行输入有多种方式,而且非常相似,包括:gets、getline、cin.getline 等,这里推荐直接用 getline 简单直接。
stringstream 每次构造析构是有开销的,好的实践是复用 stringstream 对象,注意不仅要通过 str() 函数来重置字符串对象,还要用 clear() 清空io标志。
参考代码
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main() {
string line;
stringstream sin;
vector<string> vec;
//while(cin >> line) {
while(getline(cin, line)) {
vec.clear();
sin.str(line);
sin.clear();
//stringstream sin(line);
string s;
while(sin >> s) {
vec.push_back(s);
}
sort(vec.begin(), vec.end());
if (vec.empty()) continue;
cout << vec[0];
for (int i = 1; i<vec.size(); i++) {
cout << ' ' << vec[i];
}
cout << endl;
}
}