istringstream類(lèi)研究
C++程序把輸入和輸出看作字符流,輸入時(shí),程序從輸入流中提取字節(jié),輸出時(shí),程序把字節(jié)插入到輸出流中。對(duì)于輸入輸出流既可以來(lái)自標(biāo)準(zhǔn)輸入輸出設(shè)備,也可以來(lái)自文件,甚至可以來(lái)自String對(duì)象,三者分別屬于iostream family、fstream family、sstream family。對(duì)于iostream類(lèi),就是我們通常所說(shuō)的標(biāo)準(zhǔn)流,它把程序跟標(biāo)準(zhǔn)I/O連接在一起,輸入來(lái)自鍵盤(pán),輸出送往監(jiān)視器。
對(duì)于fstream類(lèi),它把程序跟文件關(guān)聯(lián)起來(lái),輸入來(lái)自文件,輸出到文件。
對(duì)于sstream類(lèi),它是提供程序和string對(duì)象之間的I/O,可通過(guò)ostringstream sout和istringstream sin來(lái)聲明兩個(gè)對(duì)象,分別對(duì)應(yīng)輸出流和輸入流,這給編程帶來(lái)極大的方便,例如可以從文本文件中讀取一批數(shù)字字符到string對(duì)象中,再把string對(duì)象作為程序的輸入流,既可把從文件中讀取來(lái)的數(shù)字字符單個(gè)進(jìn)行讀取,從而進(jìn)行處理。
以上內(nèi)容為網(wǎng)上轉(zhuǎn)載,呵呵,原來(lái)iostream,fstream還有sstream呈三權(quán)分立之勢(shì)。





























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