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

须要#include <sstream>ios

数字转换为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)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

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

其余

stringstream clear()的误区

How do you clear a stringstream variable?

相关文章
相关标签/搜索