【C++ Primer | 08】IO庫
阿新 • • 發佈:2018-09-16
sin .html 防止 設置 ima void 分享圖片 name 錯誤
IO類
C++的輸入輸出分為三種:
(1)基於控制臺的I/O
(2)基於文件的I/O
(3)基於字符串的I/O
istringstream類
描述:從流中提取數據,支持 >> 操作
這裏字符串可以包括多個單詞,單詞之間使用空格分開
1 #include <iostream> 2 #include <sstream> 3 using namespace std; 4 int main() 5 { 6 istringstream istr("1 56.7"); 7 8 cout << istr.str() << endl;//直接輸出字符串的數據 "1 56.7" 9 10 string str = istr.str();//函數str()返回一個字符串 11 cout << str << endl; 12 13 int n; 14 double d; 15 16 //以空格為界,把istringstream中數據取出,應進行類型轉換 17 istr >> n;//第一個數為整型數據,輸出1 18 istr >> d;//第二個數位浮點數,輸出56.7 19 cout << d << endl;20 cout << n << endl; 21 d = 0; 22 n = 0; 23 24 //假設換下存儲類型 25 istr >> d;//istringstream第一個數要自動變成浮點型,輸出仍為1 26 istr >> n;//istringstream第二個數要自動變成整型,有數字的階段,輸出為56 27 28 //測試輸出 29 cout << d << endl; 30 cout << n << endl;31 return 1; 32 }
輸出結果:
舉例2:把一行字符串放入流中,單詞以空格隔開。之後把一個個單詞從流中依次讀取到字符串
1 #include <iostream> 2 #include <sstream> 3 using namespace std; 4 int main() 5 { 6 istringstream istr; 7 string line,str; 8 while (getline(cin,line))//從終端接收一行字符串,並放入字符串line中 9 { 10 istr.str(line);//把line中的字符串存入字符串流中 11 while(istr >> str)//每次讀取一個單詞(以空格為界),存入str中 12 { 13 cout<<str<<endl; 14 } 15 } 16 return 1; 17 }
輸出結果:
ostringstream類
描述:把其他類型的數據寫入流(往流中寫入數據),支持 << 操作
1 #include <sstream> 2 #include <string> 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 ostringstream ostr1; // 構造方式1 9 ostringstream ostr2("abc"); // 構造方式2 10 11 /*---------------------------------------------------------------------------- 12 *** 方法str()將緩沖區的內容復制到一個string對象中,並返回 13 ----------------------------------------------------------------------------*/ 14 ostr1 << "ostr1" << 2012 << endl; // 格式化,此處endl也將格式化進ostr1中 15 cout << ostr1.str(); 16 17 /*---------------------------------------------------------------------------- 18 *** 建議:在用put()方法時,先查看當前put pointer的值,防止誤寫 19 ----------------------------------------------------------------------------*/ 20 long curPos = ostr2.tellp(); //返回當前插入的索引位置(即put pointer的值),從0開始 21 cout << "curPos = " << curPos << endl; 22 23 ostr2.seekp(2); // 手動設置put pointer的值 24 ostr2.put(‘g‘); // 在put pointer的位置上寫入‘g‘,並將put pointer指向下一個字符位置 25 cout << ostr2.str() << endl; 26 27 /*---------------------------------------------------------------------------- 28 *** 重復使用同一個ostringstream對象時,建議: 29 *** 1:調用clear()清除當前錯誤控制狀態,其原型為 void clear (iostate state=goodbit); 30 *** 2:調用str("")將緩沖區清零,清除臟數據 31 ----------------------------------------------------------------------------*/ 32 ostr2.clear(); 33 ostr2.str(""); 34 35 cout << ostr2.str() << endl; 36 ostr2.str("_def"); 37 cout << ostr2.str() << endl; 38 ostr2 << "gggghh"; // 覆蓋原有的數據,並自動增加緩沖區 39 cout << ostr2.str() << endl; 40 }
輸出結果:
參考資料
- istringstream、ostringstream、stringstream 類介紹 和 stringstream類 clear函數的真正用途
- std::ostringstream用法淺析
【C++ Primer | 08】IO庫