2009-06-03 57 views
42

如何在C++中將long轉換爲string如何在C++中將long轉換爲字符串?

+5

只是有點吹毛求疵的使用std::to_string ......我不會稱之爲 「鑄造」。 – kbyrd 2009-06-03 22:40:51

+1

@krbyrd你能告訴我爲什麼嗎?我自己是一名.NET技術人員,C++對我仍然感到不舒服。 :) – 2009-06-03 22:42:41

+4

同意,這是一個轉換,而不是演員。 – ralphtheninja 2009-06-03 22:43:56

回答

49

你可以使用stringstream。

#include <sstream> 

// ... 
std::string number; 
std::stringstream strstream; 
strstream << 1L; 
strstream >> number; 

標準庫中通常會有一些專有的C函數供您的編譯器使用。儘管如此,我更喜歡更「便攜」的變體。

C做的方法是用sprintf,但這不是很安全。在一些庫中有像sprintf_s這樣的新版本可以防止緩衝區溢出。

1

結賬std::stringstream

3
#include <sstream> 


    .... 

    std::stringstream ss; 
    ss << a_long_int; // or any other type 
    std::string result=ss.str(); // use .str() to get a string back 
-1

我通常的做法是用sprintf。等了很久,你可以做以下假設你是一個32位架構:

char buf[5] = {0}; // one extra byte for null  
sprintf(buf, "%l", var_for_long); 
8
int main() 
{ 
    long mylong = 123456789; 
    string mystring; 
    stringstream mystream; 
    mystream << mylong; 
    mystring = mystream.str(); 
    cout << mystring << "\n"; 
    return 0; 
} 
22

那麼如果你是複製粘貼的球迷,在這裏它是:

#include <sstream> 

template <class T> 
inline std::string to_string (const T& t) 
{ 
    std::stringstream ss; 
    ss << t; 
    return ss.str(); 
} 
7

我不知道這是什麼樣的功課,但最有可能老師不希望有一個答案,你只需調用一個「神奇」的現有功能(儘管這是推薦的方式),但他想知道是否可以自己實現。

回到過去,我的老師曾經說過這樣的話:「我想看看你是否可以自己編程,而不是如果你能在系統中找到它。」那麼,怎麼不對他;)..

無論如何,如果你的老師是一樣的,這裏是做硬盤的方式 ..

std::string LongToString(long value) 
{ 
    std::string output; 
    std::string sign; 

    if(value < 0) 
    { 
    sign + "-"; 
    value = -value; 
    } 

    while(output.empty() || (value > 0)) 
    { 
    output.push_front(value % 10 + '0') 
    value /= 10; 
    } 

    return sign + output; 
} 

你可以說,使用std::string不「困難的方式」,但我想在實際的算法中什麼是重要的。

1

一個不被任何人所覆蓋到目前爲止的東西,來幫助你思考問題進一步,應該是一個長鏡頭,當它被強制轉換爲字符串的格式。

只需看看spreedsheet程序(如Calc/Excel)。你是否希望它四捨五入到最接近的百萬,如果它是負數,則用括號表示,總是顯示符號....是否該數字表示其他東西,是否應該用Oractal或Hex顯示它?

到目前爲止的答案給了你一些默認輸出,但也許不是正確的。

41

在C++ 11中,實際上有<字符串>中的std :: to_string和std :: to_wstring函數。

string to_string(int val); 
string to_string(long val); 
string to_string(long long val); 
string to_string(unsigned val); 
string to_string(unsigned long val); 
string to_string(unsigned long long val); 
string to_string(float val); 
string to_string(double val); 
string to_string (long double val); 
1

可以在C++ 11

long val = 12345; 
std::string my_val = std::to_string(val);