# 4. Stringstream 在C語言的時候處理字串非常麻煩,而且在輸入字串的時候要使用char[]或char*,很不直觀,到了C\++的時候多了string這個資料型態,在C++11的時候又有了stringstream,此時要做字串處理變得很方便。 要使用stringstream前要先引用一個標頭檔,#include \<sstream>,stringstream專門拿來讀取字串並且處理。 ## 1. int 轉換成 string ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss; string int_to_str; int num = 12345; ss << num; ss >> int_to_str; cout << int_to_str << endl; return 0; } ``` ## 2. string 轉換成 int ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss; string int_to_str = "11804"; int num; ss << int_to_str; ss >> num; cout << num << endl; return 0; } ``` ## 3. 清除stringstream 如果使用過的stringstream還要繼續使用,必須先清除,如果未清除則會出現無法預測的答案,以下為未清除的時候。 ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss; string int_to_str = "11804"; int num; ss << int_to_str; ss >> num; cout << num << " "; string str = "12345"; ss << str; int a; ss >> a; cout << a ; return 0; } ``` 此時的輸出是:11804 0 但我們希望的結果為11804 12345 所以我們要進行刪除,利用ss.str(""); ss.clear();。 ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss; string int_to_str = "11804"; int num; ss << int_to_str; ss >> num; cout << num << " "; ss.str(""); ss.clear(); string str = "12345"; ss << str; int a; ss >> a; cout << a; return 0; } ``` 此時就可以正常輸出了。 ## 4. 利用stringstream進行基本輸出 ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss1("he"); stringstream ss2,ss3,ss4; string str("max"); ss2.str("hello"); ss3.str(str); ss4 << "hey"; cout << ss1.str() << endl;//output = he cout << ss2.str() << endl;//output = hello cout << ss3.str() << endl;//output = max cout << ss4.str() << endl;//output = hey return 0; } ``` ## 5. 分割stringstream ### 用空格做切割 ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss1("my name is max "); string str(""); while(ss1 >> str) cout << str << endl; return 0; } ``` ### 用getline()把stringstream用特定的string取出 第一個arguement放stringstream,第二個arguement放string,第三個arguement只能放char,不能放string。 ```cpp= #include <iostream> #include <sstream> using namespace std; int main(){ stringstream ss("hello my name is max"); string str; while(getline(ss,str,'m')){ cout << str << endl; } return 0; } ``` output : hello y na e is ax