C++ sstream的使用

C++ sstream的使用

  • 基本操作
  • 实用函数
  • 参考链接

  sstream库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。[1]

基本操作

1、操作前后: 操作前将string压入sstream,操作后压出

stringstream stream;     //声明一个stringstream变量
string str;
...//具体操作
str = stream.str();     //从steam中提取刚插入的整型数 ,等效于stream >> str;

2、具体操作
a\可跳过空格

std::stringstream ss;
ss << 100 << ' ' << 200;
int foo,bar;
ss >> foo >> bar;
//rslt: foo==100,bar==200

b\尽量识别,不可识别时则为0

ss << 100 << ',' << 200;
int foo,bar;
ss >> foo >> bar;
//rslt: foo=100,bar=200

实用函数

1、myto_string()
 STL中的to_string()不能把cstring转string,而下面的函数可以

template<class T>
string myto_string(const T& t)
{
        ostringstream oss;//创建一个流
        oss<<t;//把值传递如流中
        return oss.str();//获取转换后的字符转并将其写入result
}

2、stringsteam的方法str()
 该方法使用后,输出流指针总是指向流的最前面
a、不恰当使用

  std::stringstream ss;
string str1("123456");
ss.str(str1);
ss<<"hello";
string str2;
ss>> str2;
cout<<str1<<endl;//123456
cout<<str2<<endl;//hello6
 

b、正确使用

 std::stringstream ss;
string str1("123456");
ss.str(str1);
ss.seekp(0,ios::end);
ss<<"hello";
cout<<ss.str()<<endl;//123456hello
cout<<str1<<endl;//123456

3、大多数类型可以用的转换[3]:

template<class out_type, class in_value>
out_type myconvert(const in_value & t)
{
        stringstream stream;
        stream<<t;//向流中传值
        out_type result;//这里存储转换结果
        stream>>result;//向result中写入值
        return result;
}
    string str1("123456");
    str1 = myconvert<string,int>(1234);

4、树的序列化和你序列化:
 由于代码比较长,就不复制,了请直接到链接 3 看。我想,这段代码没必要考虑效率,它的优点在于可视化。如果注重效率的话,就应该把数据存为二进制流了。

参考链接

[1] C++ stringstream的用法|c++ 字符串流 sstream(常用于格式转换)
[2]std::stringstream::stringstream
[3]c++ stringstream(老好用了)
[4]C++文件中的移动文件指针的函数怎么用

你可能感兴趣的:(C++)