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?

相關文章
相關標籤/搜索