C++11 更新
从C++11 标准开始,字符串到数字的转换(反之亦然)已内置到标准库中。 <string> 中包含以下所有功能(根据第 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)。
如果转换成功并且idx 不是0,idx 将包含第一个未用于解码的字符的索引。这可能是最后一个字符后面的索引。
最后,整数类型允许指定一个基数,对于大于 9 的数字,假定为字母表(a=10 直到 z=35)。您可以在此处找到有关可以为 floating-point numbers、signed integers 和 unsigned integers 解析的确切格式的更多信息。
最后,对于每个函数,还有一个重载接受 std::wstring 作为它的第一个参数。
数字转字符串
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 选项并使用流操纵器,如此处的另一个答案中所述。
如 cmets 中所述,这些函数回退到可能不是最大精度的默认尾数精度。如果您的应用程序需要更高的精度,最好还是回到其他字符串格式化程序。
还定义了类似的函数,命名为to_wstring,它们将返回std::wstring。