【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;
    }
}
posted @ 2021-08-07 20:39  与MPI做斗争  阅读(84)  评论(0编辑  收藏  举报