【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
需要#include <sstream>
。
数字转换为string字符串
#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)。
如果只是判断是否相等,可以用==
。看下面的示例:
判断字符串是否相等
#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;
}
}
编译运行:
$ g++ test.cpp
$ ./a.out
1
1
0
s1 == s2
s1 == s2
要判断两个变量名是否指向同一个对象,前提是这两个变量为指针。
字符串转换为数字
这里举个将“-1”转换为两种类型(无符号和有符号)数字的错误例子:
// 错误的代码
#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必须进一个出一个,进两个就行出两个。而进一个不能出两个。
所以有以下两种正确的思路:
思路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
其中第二个结果每次运行后不一定相同。
其他
How do you clear a stringstream variable?
来源:oschina
链接:https://my.oschina.net/u/940565/blog/702465