stringstream是字符串流。它將流與存儲在內存中的string對象綁定起來。
在多種數據類型之間實現自動格式化。
1 stringstream對象的使用
#include<sstream> #include<iostream> using namespace std; int main() { string line,word; while(getline(cin,line)) { stringstream stream(line); cout<<stream.str()<<endl; while(stream>>word){cout<<word<<endl;} } return 0; }
輸入:shanghai no1 school 1989
輸出:shanghi no1 school 1989
shanghai
no1
school
1989
2stringstream提供的轉換和格式化
程序:
#include<sstream> #include<iostream> using namespace std; int main() { int val1 = 512,val2 =1024; stringstream ss; ss<<"val1: "<<val1<<endl //“val1: "此處有空格,字符串流是通過空格判斷一個字符串的結束
<<"val2: "<<val2<<endl; cout<<ss.str(); string dump; int a,b; ss>>dump>>a
>>dump>>b; cout<<a<<" "<<b<<endl; return 0; }
輸出為:val1: 512
val2: 1024
512 1024
第一處黑體字部分:將int類型讀入ss,變為string類型
第二處黑體字部分:提取512,1024保存為int類型。當然,如果a,b聲明為string類型,那么這兩個字面值常量相應保存為string類型
3其他注意
stringstream不會主動釋放內存(或許是為了提高效率),但如果你要在程序中用同一個流,反復讀寫大量的數據,將會造成大量的內存消 耗,因些這時候,需要適時地清除一下緩沖 (用 stream.str("") )
#include <cstdlib> #include<iostream> #include<sstream> using namespace std; int main() { stringstream ss; string s; ss<<"shanghai no1 school"; ss>>s; cout<<"size of stream = "<<ss.str().length()<<endl; cout<<"s: "<<s<<endl; ss.str(""); cout<<"size of stream = "<<ss.str().length()<<endl; }
輸出:
size of stream = 19
s: shanghai
size of stream = 0