1. 程式人生 > >【C++ Primer | 08】IO庫

【C++ Primer | 08】IO庫

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庫