istringstream類研究
C++程序把輸入和輸出看作字符流,輸入時,程序從輸入流中提取字節,輸出時,程序把字節插入到輸出流中。對于輸入輸出流既可以來自標準輸入輸出設備,也可以來自文件,甚至可以來自String對象,三者分別屬于iostream family、fstream family、sstream family。對于iostream類,就是我們通常所說的標準流,它把程序跟標準I/O連接在一起,輸入來自鍵盤,輸出送往監視器。
對于fstream類,它把程序跟文件關聯起來,輸入來自文件,輸出到文件。
對于sstream類,它是提供程序和string對象之間的I/O,可通過ostringstream sout和istringstream sin來聲明兩個對象,分別對應輸出流和輸入流,這給編程帶來極大的方便,例如可以從文本文件中讀取一批數字字符到string對象中,再把string對象作為程序的輸入流,既可把從文件中讀取來的數字字符單個進行讀取,從而進行處理。
以上內容為網上轉載,呵呵,原來iostream,fstream還有sstream呈三權分立之勢。





























以上程序在vc6.0上運行正常;
值得一提的是,經過我的測試,我發現雖然sstream是純c++的東西,但是它也可以用char型數組進行初始化;
而且輸入的數據默認情況下以空格為分隔符;
輸入浮點類型的時候,最多只能取到小數點后15位,第15位會進行四舍五入;
如果你的輸入格式和數據流格式不匹配,那么將導致程序完全運行錯誤,不過我很奇怪c++內部為什么不會報錯?
只有一種情況例外
對于一個浮點數 比如說123,456
如果先以整數輸入,那么得到123
再以浮點數輸入,得到0.456;
小結:感覺istringstream和sscanf是同類型的函數,只不過一個屬于傳統的c語言而另一個屬于高級的c++;
用它可以方便的分離字符串,并且可以在字符串長度未知的情況下進行操作,這是sscanf所無可比擬的。
最后,要特別鳴謝的是張宏課上面的那位同學,多謝你的指點 :-)
posted on 2009-03-23 22:36 abilitytao 閱讀(4041) 評論(10) 編輯 收藏 引用