C++:利用stringstream对数字和string互相转换

我只是一个虾纸丫 提交于 2019-12-22 22:49:37

【推荐】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  

其中第二个结果每次运行后不一定相同。

其他

stringstream clear()的误区

How do you clear a stringstream variable?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!