標籤:http 可讀性 cin ret names 空格 color int 一個輸入資料流
如果有一個檔案aaa.txt,有若干行,不知道每行中含有幾個整數,要編程輸出每行的整數之和,該如何??
由於cin>>不能辨別空格與斷行符號的差異,因此只能用getline的方式逐行讀入資料到string變數中,但在string變數中分離若干個整數還是稍顯吃力。一個好的方法是用string流:
1 #include<iostream> 2 #include<sstream> 3 #include<fstream> 4 using namespace std; 5 int main() 6 { 7 ifstream in("aaa.txt"); 8 for (string s; getline(in, s);) 9 {10 int a, sum = 0;11 for (istringstream sin(s); sin >> a; sum += a);12 cout << sum << endl;13 }14 cin.get();15 return 0;16 }
講道理,該程式編得有些放肆。本該將istringstream sin(s)單獨佔一行,結果非但不然,還將sum+=a都縮到迴圈結構描述的步長部分中去了。這樣一來,迴圈體便為空白了,於是,for迴圈的描述部分後面加上分號便自成獨立的語句,但它確實能夠完成累計工作。作為單獨的迴圈,最後的“;”還是不能忘記的!!因為程式小,所以可讀性還不到受傷害的地步,請讀者來見識一下著這種風格。
istringstream是輸入string流,它在sstream標頭檔中說明。該語句類似檔案流操作,只不過建立sin流時,其參數為string對象。它是將string的實體看作是一個輸入資料流,因而,sin>>a即是從string流中輸入整數到a中,輸啊輸,一直輸到string中的最後一個整數!
string流很有用,有時候要將內容逐個輸出到string中,最後才根據計算結果來編排輸出格式。這時候,用string流就很管用。
C++ code:string stream(string流)