摳佽了一天就弄了這個:還不錯總算是弄出來了。希望有建議和補充:我的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 }