一、istringstream类
描述:从流中提取数据,支持 >> 操作
这里字符串可以包括多个单词,单词之间使用空格分开
#include <iostream>
#include <sstream>
using namespace std;
int main()
{istringstream istr("1 56.7");cout << istr.str() << endl;//直接输出字符串的数据 "1 56.7" string str = istr.str();//函数str()返回一个字符串 cout << str << endl;int n;double d;//以空格为界,把istringstream中数据取出,应进行类型转换 istr >> n;//第一个数为整型数据,输出1 istr >> d;//第二个数位浮点数,输出56.7 cout << n << endl;cout << d << endl;d = 0;n = 0; istr >> d;//istringstream第一个数要自动变成浮点型,输出仍为1 istr >> n;//istringstream第二个数要自动变成整型,有数字的阶段,输出为56 cout << d << endl;cout << n << endl;return 1;
}
输出结果:
二、ostringstream类
描述:把其他类型的数据写入流(往流中写入数据),支持 << 操作
#include <sstream>
#include <string>
#include <iostream>
using namespace std;int main()
{ostringstream ostr1;ostringstream ostr2("abc");ostr1 << "ostr1" << 2012 << endl; // 格式化,此处endl也将格式化进ostr1中cout << ostr1.str();long curPos = ostr2.tellp(); //返回当前插入的索引位置(即put pointer的值),从0开始 cout << "curPos = " << curPos << endl;ostr2.seekp(2); // 手动设置put pointer的值ostr2.put('g'); // 在put pointer的位置上写入'g',并将put pointer指向下一个字符位置cout << ostr2.str() << endl;/*----------------------------------------------------------------------------重复使用同一个ostringstream对象时,建议:1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit);2:调用str("")将缓冲区清零,清除脏数据----------------------------------------------------------------------------*/ostr2.clear();ostr2.str("");cout << ostr2.str() << endl;ostr2.str("_def");cout << ostr2.str() << endl;ostr2 << "gggghh"; // 覆盖原有的数据,并自动增加缓冲区cout << ostr2.str() << endl;
}
输出结果:
相关练习:
1. 151. 翻转字符串里的单词
参考资料
1. istringstream、ostringstream、stringstream 类介绍