转换为整数浮点数类型

包含数字的 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::strings 转换为整数或浮点类型,如果它们无法解析输入,则抛出异常。如果可能,你应该使用这些功能

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 开始)和十六进制(从 0x0X 开始),任何其他值是使用的基础

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