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(); } |
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; } |
你可以说使用
有几种方法。阅读庄园的字符串格式化程序进行深入比较。
在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来表示?
到目前为止,答案已经给出了一些默认输出,但可能不是正确的输出。
查看
我通常是用sprintf来完成的。因此,在很长一段时间内,假设您使用的是32位体系结构,则可以执行以下操作:
1 2 | char buf[5] = {0}; // one extra byte for null sprintf(buf,"%l", var_for_long); |