转换为整数浮点数类型
包含数字的 std::string
可以使用转换函数转换为整数类型或浮点类型。
***请注意,***所有这些函数在遇到非数字字符时都会停止解析输入字符串,因此 123abc
将转换为 123
。
std::ato*
系列函数将 C 风格的字符串(字符数组)转换为整数或浮点类型:
std::string ten = "10";
double num1 = std::atof(ten.c_str());
int num2 = std::atoi(ten.c_str());
long num3 = std::atol(ten.c_str());
Version >= C++ 11
long long num4 = std::atoll(ten.c_str());
但是,不鼓励使用这些函数,因为如果它们无法解析字符串,它们将返回 0
。这很糟糕,因为 0
也可能是有效的结果,例如输入字符串为 0
,因此无法确定转换是否实际失败。
较新的 std::sto*
系列函数将 std::string
s 转换为整数或浮点类型,如果它们无法解析输入,则抛出异常。如果可能,你应该使用这些功能 :
Version >= C++ 11
std::string ten = "10";
int num1 = std::stoi(ten);
long num2 = std::stol(ten);
long long num3 = std::stoll(ten);
float num4 = std::stof(ten);
double num5 = std::stod(ten);
long double num6 = std::stold(ten);
此外,与 std::ato*
系列不同,这些函数还处理八进制和十六进制字符串。第二个参数是指向输入字符串中的第一个未转换字符的指针(此处未示出),第三个参数是要使用的基数。0
是自动检测八进制(从 0
开始)和十六进制(从 0x
或 0X
开始),任何其他值是使用的基础
std::string ten = "10";
std::string ten_octal = "12";
std::string ten_hex = "0xA";
int num1 = std::stoi(ten, 0, 2); // Returns 2
int num2 = std::stoi(ten_octal, 0, 8); // Returns 10
long num3 = std::stol(ten_hex, 0, 16); // Returns 10
long num4 = std::stol(ten_hex); // Returns 0
long num5 = std::stol(ten_hex, 0, 0); // Returns 10 as it detects the leading 0x