stringstream

stringstream 是 C++ 提供的专门用于处理字符串的 输入输出 流类。
在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被创建,使用后要被删除。
stringstream 定义于头文件 ,它其实是个别名,具体定义如下:

typedef basic_stringstream stringstream;

向对象输入字符串 : "<<" 表示向一个对象中输入
stringstream ss;
ss << s;

在创建对象的时候使用字符串初始化:
stringstream ss("hello stringstream");
cout << ss.str() << endl;

上两种ss的区别:

#include <iostream>
#include <sstream>
using namespace std;
 
int main()
{
    string str("asd");
    // 第二种构造
    stringstream ss2(str);
    cout << ss2.str() << endl;
    
    // 第一种构造
    ss2 << "r";
    cout << ss2.str() << endl;
 
    ss2 << "13";
    cout << ss2.str() << endl;
 
    ss2 << "hy";
    cout << ss2.str() << endl;
    
    return 0;
}

/*
输出:
asd
rsd
r13
r13hy
*/

可以发现,利用第一种构造函数创建对象时,输入字符串后直接进行字符串拼接,而第二种构造方式,在进行字符串拼接时,首先把原本的字符串覆盖掉,之后再进行拼接。

如果不想原来的字符串被覆盖,则需要换一种构造方式,如下:

    #include <iostream>
    #include <sstream>
    using namespace std;
     
    int main()
    {
        ostringstream ss("1 2 3 4 ", std::ios_base::ate);	// append 方式追加
        cout << ss.str() << endl;
     
        ss << "5 3 4";
        cout << ss.str() << endl;
        
        return 0;
    }

    /*
    输出:
    1 2 3 4 
    1 2 3 4 5 3 4
    */

stringstream进行类型转换:

int num = 123;
std::stringstream ss;
ss << num; // 将整数放入流中
std::string str = ss.str();

利用 stringstream 指定字符分割字符串

上面描述了利用 stringstream 去除字符串空格,其实就是利用空格来分割字符串,同样,也可以指定其他字符对字符串进行分割,这需要与 getline() 函数搭配使用,下面以逗号分割字符串为例:

getline 详解:
getline()的原型是istream& getline ( istream &is , string &str , char delim );

    其中 istream &is 表示一个输入流,
    例如,可使用cin;
    string str ; getline(cin ,str)
    也可以使用 stringstream
    stringstream ss(“test#”) ; getline(ss,str)
    char delim表示遇到这个字符停止读入,通常系统默认该字符为’\n’,也可以自定义字符
posted @ 2025-03-25 13:39  老禾的账本  阅读(68)  评论(0)    收藏  举报