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


How do I convert a long to a string in C++?

在C++中,如何将EDCOX1的0度转换为EDCOX1×1?


STD:在C++ 11中,实际上存在STD::toString和STD::TooWWString函数。

1
2
3
4
5
6
7
8
9
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);

您可以使用Stringstream。

1
2
3
4
5
6
7
#include <sstream>

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

在标准库中,编译器通常也有一些专用的C函数。不过,我更喜欢更"便携"的变体。

C的方法是使用sprintf,但这并不十分安全。在一些库中有新的版本,比如sprintf_,它可以防止缓冲区溢出。


如果你喜欢复制粘贴,这里是:

1
2
3
4
5
6
7
8
9
#include <sstream>

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


boost::lexical_cast(my_long)更多信息请访问http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm


1
2
3
4
5
6
7
8
9
10
11
int main()
{
    long mylong = 123456789;
    string mystring;
    stringstream mystream;
    mystream << mylong;
    mystring = mystream.str();
    cout << mystring <<"
"
;
    return 0;
}

我不知道这是什么类型的作业,但最可能的情况是,老师不想要一个你称之为"神奇的"现有功能的答案(尽管这是推荐的方法),但他想看看你是否可以自己实现。

以前,我的老师常说"我想看看你是否能自己编程,而不是你是否能在系统中找到它。"嗯,他错得有多严重;)。

不管怎样,如果你的老师是一样的,这是很难做到的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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不是"困难的方式",但我猜在实际的集会中什么是重要的。


有几种方法。阅读庄园的字符串格式化程序进行深入比较。


在C++ 11中可以使用STD:toSype字符串

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

1
2
3
4
5
6
7
8
   #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


到目前为止,任何人都没有涉及到的一个问题是,为了帮助您进一步思考这个问题,当它被强制转换为字符串时,需要多长时间的格式。

只需看看spreedsheet程序(如calc/excel)。你想让它四舍五入到最接近的百万,如果它是负数,用括号括起来,总是显示符号……这个数字真的是其他东西的表示吗?你应该用oractal还是hex来表示?

到目前为止,答案已经给出了一些默认输出,但可能不是正确的输出。


查看std::stringstream


我通常是用sprintf来完成的。因此,在很长一段时间内,假设您使用的是32位体系结构,则可以执行以下操作:

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