如何在C ++中将long转换为字符串?

时间:2009-06-03 22:34:36

标签: c++

如何在C ++中将long转换为string

12 个答案:

答案 0 :(得分:58)

在C ++ 11中,< string>中实际上有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 :(得分:51)

你可以使用stringstream。

#include <sstream>

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

标准库中通常还有一些专有的C函数可供编译器使用。我更喜欢更“便携”的变体。

C方式可以使用sprintf,但这不是很安全。在某些库中,有一些新版本,如sprintf_s,可以防止缓冲区溢出。

答案 2 :(得分:24)

如果你是复制粘贴的粉丝,那么它就是:

#include <sstream>

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

答案 3 :(得分:18)

boost::lexical_cast<std::string>(my_long) 更多http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm

答案 4 :(得分:9)

int main()
{
    long mylong = 123456789;
    string mystring;
    stringstream mystream;
    mystream << mylong;
    mystring = mystream.str();
    cout << mystring << "\n";
    return 0;
}

答案 5 :(得分: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不是“艰难的方式”,但我想在实际的算法中有什么重要。

答案 6 :(得分:4)

有几种方法。阅读The String Formatters of Manor Farm进行深入比较。

答案 7 :(得分: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

答案 8 :(得分:3)

您可以在C ++ 11中使用std::to_string

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

答案 9 :(得分:1)

结帐std::stringstream

答案 10 :(得分:1)

到目前为止,任何人都没有涉及的事情之一是帮助你进一步思考这个问题,当它被转换为字符串时,应该采用什么格式。

只需查看spreedsheet程序(如Calc / Excel)。你想要它四舍五入到最接近的百万,如果它是负数的括号,总是显示符号....数字是否真的是其他东西的表示,如果你用Oractal或Hex显示它?

到目前为止,答案给了你一些默认输出,但也许不是正确的输出。

答案 11 :(得分:-1)

我通常采用sprintf的方式。所以很长一段时间,假设您使用32位架构,则可以执行以下操作:

char buf[5] = {0}; // one extra byte for null    
sprintf(buf, "%l", var_for_long);