C++的sstream相關知識


摳佽了一天就弄了這個:還不錯總算是弄出來了。希望有建議和補充:我的CSDN博客鏈接:桑海的CSDN博客

 

 1 #include<iostream>
 2 #include<sstream>       //stringstream
 3 #include<cstdio>        //sscanf,sprintf()
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     //*************************************************block1**********************************************************************
 9 
10     stringstream stream("123 3.14 hello");     //不同的數以空而分開,123是第一個數;hello是第三個數
11     int ival;
12     double dval;
13     string str;
14     //將其中的整型提取出來寫入到整型變量ival中,浮點型提取出來寫入到浮點型dval中,字符型到string中
15     //原則是序號對應,如提取stream對象中的第一個與ival對應。stream與第三個str對照。
16     //如果相對應的類型不同,則自動轉化為相應的類型。如下:將123轉化為字符型;3.14轉化為整型;hello轉化為浮點型;相當於C中的sprintf函數的作用。
17     stream >> str >> ival >> dval;
18     cout << str << "\t" << ival << "\t" << dval << endl;
19 
20     stream.clear();     //回復stream的初始狀態,以便繼續對stream對象進行操作。(小沈陽說:這個必須有)
21 
22     //重新對stream對象進行操作,再次之前必須對有stream.clear();對其狀態標志進行初始化。
23 
24     //*************************************************block2**********************************************************************
25 
26 
27     //*************************************************TEST1*************************************************************************
28     //    stream.str("");//每次讀入新數前,將stream對象置為空,方便重新操作。其執行過程是如果stream對象不為空, ^ . ^ 1
29     //則從第一個位置開始用新值掉替換原來的值,剩余的繼續輸出。如本例如果沒有上一行的置空操作則輸出:   Sanghai4 hello。與上一次的輸入對照可知。
30     //                                                                                                 123 3.14 hello
31     //*************************************************test1*************************************************************************
32 
33 
34     int ival1;
35     string str1, s;
36     cout << "Enter a string:" << endl;
37     cin >> s;
38     stream.str(s);       //stream.str(s)帶參函數的意思是,用s的副本初始化stream對象,即覆蓋掉原來的值
39     cout << stream.str() << endl;
40     stream >> ival1;
41     cout << ival1 << endl;      //2293512、4665524
42     stream.clear();     //重置stream為初始狀態
43 
44     //*************************************************TEST2*************************************************************************
45     //向stream對象中插入字符
46     //stream.str("");
47     stream << "Sang";//put操作時stream對象的第一個位置開始操作,如果stream對象不為空,則修改向相應位置的值為新值
48     //put操作緊接着新輸入的數據后面進行插入,如果新輸入后面還有老數據(上一次的數據)則替換。
49     //例如本例中,如果沒有stream << "Sang";則輸出.ang;如果有的話,則輸出sang.ai
50     stream.put('.');   //put函數與空白符自動結束,並忽略空白符(空格、制表符、換行符)    //此處參考記憶空間的博客:點擊打開鏈接
51 
52     //綜上,一般還是需要stream.str("")操作的,可以避免出錯,還可以節省資源
53     //*************************************************test2*************************************************************************
54 
55     string str2;
56     stream >> str2;  //stream中自動忽略空白符
57     cout << str2 << endl;       //變相的相當於向string對象中插入單個字符
58     stream.clear();             //重置stream為初始狀態
59 
60     //*************************************************block3**********************************************************************
61     //此處參考lw02nju的專欄的博客:鏈接如下:點擊打開鏈接
62     //一下不在贅述,通用模版如下:將in_value值轉換為out_type類型string、char、int、double、float、long之間都可以互相轉化。
63     /*
64     template<class out_type,class in_value>
65 
66     out_type convert(const in_value & t)
67     {
68         stringstream stream;
69         stream<<t;//向流中傳值
70         out_type result;//這里存儲轉換結果
71         stream>>result;//向result中寫入值
72         return result;
73     }
74     */
75     //*************************************************block2**********************************************************************
76     return 0;
77 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM