2009-06-03 50 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);