How to convert a number to string and vice versa in C++(如何在C++中将数字转换为字符串,反之亦然)
问题描述
因为这个问题每周都会被问到,所以这个FAQ可能会帮助很多用户.
Since this question gets asked about every week, this FAQ might help a lot of users.
C++中如何将整数转换为字符串
How to convert an integer to a string in C++
C++中如何将字符串转换为整数
how to convert a string into an integer in C++
如何将浮点数转换为 C++ 中的字符串
how to convert a floating-point number to a string in C++
C++中如何将字符串转换为浮点数
how to convert a string to a floating-point number in C++
推荐答案
C++11 更新
从 C++11 标准开始,字符串到数字的转换(反之亦然)已内置到标准库中. 中包含以下所有函数(根据第 21.5 段).
Update for C++11
As of the C++11 standard, string-to-number conversion and vice-versa are built in into the standard library. All the following functions are present in <string> (as per paragraph 21.5).
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
每一个都将一个字符串作为输入,并尝试将其转换为一个数字.如果无法构造有效数字,例如因为没有数字数据或数字超出类型范围,则会引发异常(std::invalid_argument 或 std::out_of_range).
Each of these take a string as input and will try to convert it to a number. If no valid number could be constructed, for example because there is no numeric data or the number is out-of-range for the type, an exception is thrown (std::invalid_argument or std::out_of_range).
如果转换成功并且idx 不是0,idx 将包含未用于解码的第一个字符的索引.这可能是最后一个字符后面的索引.
If conversion succeeded and idx is not 0, idx will contain the index of the first character that was not used for decoding. This could be an index behind the last character.
最后,整数类型允许指定基数,对于大于 9 的数字,假定字母表(a=10 直到 z=35).您可以在此处找到有关可以为 浮点数解析的确切格式的更多信息,有符号整数和无符号整数.
Finally, the integral types allow to specify a base, for digits larger than 9, the alphabet is assumed (a=10 until z=35). You can find more information about the exact formatting that can parsed here for floating-point numbers, signed integers and unsigned integers.
最后,对于每个函数,还有一个接受 std::wstring 作为第一个参数的重载.
Finally, for each function there is also an overload that accepts a std::wstring as it's first parameter.
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long 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);
这些更简单,您传递适当的数字类型并返回一个字符串.对于格式化选项,您应该回到 C++03 stringsream 选项并使用流操纵器,如此处的其他答案中所述.
These are more straightforward, you pass the appropriate numeric type and you get a string back. For formatting options you should go back to the C++03 stringsream option and use stream manipulators, as explained in an other answer here.
如评论中所述,这些函数回退到默认尾数精度,这可能不是最大精度.如果您的应用程序需要更高的精度,最好返回到其他字符串格式化程序.
As noted in the comments these functions fall back to a default mantissa precision that is likely not the maximum precision. If more precision is required for your application it's also best to go back to other string formatting procedures.
也定义了类似的函数,名为to_wstring,它们将返回一个std::wstring.
There are also similar functions defined that are named to_wstring, these will return a std::wstring.
这篇关于如何在C++中将数字转换为字符串,反之亦然的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在C++中将数字转换为字符串,反之亦然
基础教程推荐
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 这个宏可以转换成函数吗? 2022-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 常量变量在标题中不起作用 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
