须要#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
其中第二个结果每次运行后不必定相同。