須要#include <sstream>
。ios
#include <iostream> #include <sstream> int main() { std::stringstream ss; ss << 100; std::cout << ss << std::endl; std::cout << ss.str() << std::endl; std::cout << ss.str().compare("10") << std::endl; // 比較字符串 std::cout << ss.str().compare("100") << std::endl; std::cout << ss.str().compare("102") << std::endl; std::string data("100"); std::cout << ss.str().compare(data) << std::endl; }
編譯運行:函數
$ g++ test.cpp $ ./a.out 0x7ffea3490478 100 1 0 -2 0
ss.str()
是字符串結果。string類型之間比較能夠用compare函數,若相等則返回值爲0。注意 ,0在條件判斷中表明false,因此必須if (a.compare(b)==0)。ui
若是隻是判斷是否相等,能夠用==
。看下面的示例:指針
#include <iostream> int main() { std::string s1 = "zz"; std::string s2 = "zz"; std::cout << (s1 == s2) << std::endl; // 1 std::cout << ("a" == "a") << std::endl; // 1 std::cout << ("a" == "b") << std::endl; // 0 if(s1.compare(s2) == 0) { std::cout << "s1 == s2" << std::endl; } if(s1 == s2) { std::cout << "s1 == s2" << std::endl; } }
編譯運行:code
$ g++ test.cpp $ ./a.out 1 1 0 s1 == s2 s1 == s2
要判斷兩個變量名是否指向同一個對象,前提是這兩個變量爲指針。對象
這裏舉個將「-1」轉換爲兩種類型(無符號和有符號)數字的錯誤例子:blog
// 錯誤的代碼 #include <iostream> #include <sstream> int main() { std::stringstream ss; unsigned int ui; int i; std::string s("-1"); ss << s; ss >> ui; ss >> i; // 出現錯誤 std::cout << ui << std::endl; std::cout << i << std::endl; }
編譯運行結果以下:字符串
$ g++ test.cpp $ ./a.out 4294967295 32698
stringstream必須進一個出一個,進兩個就行出兩個。而進一個不能出兩個。get
因此有如下兩種正確的思路:string
思路1:
#include <iostream> #include <sstream> int main() { std::stringstream ss; unsigned int ui; int i; std::string s("-1"); ss << s; ss << s; // 又進了一次 ss >> ui; ss >> i; std::cout << ui << std::endl; std::cout << i << std::endl; }
編譯運行:
$ g++ test.cpp $ ./a.out 4294967295 -1
思路2:
#include <iostream> #include <sstream> int main() { std::stringstream ss; unsigned int ui; int i; std::string s("-1"); ss << s; ss >> ui; ss >> i; ss.clear(); // 必須 ss.str(""); // 必須 ss << s; ss >> i; std::cout << ui << std::endl; std::cout << i << std::endl; }
編譯運行:
$ g++ test.cpp $ ./a.out 4294967295 -1
注意:
ss.clear(); // 必須 ss.str(""); // 必須
是必須的,若沒有,會出現下面的錯誤結果:
$ ./a.out 4294967295 32652
其中第二個結果每次運行後不必定相同。