一、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 類介紹