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());
long long num4 = std::atoll(ten.c_str());
但是,不建议使用这些函数,因为0如果它们无法解析字符串,则它们将返回。这很不好,因为0例如输入字符串为“ 0”,这也可能是有效结果,因此无法确定转换是否真正失败。
较新std::sto*的函数系列将std::strings转换为整数或浮点类型,如果它们无法解析其输入,则抛出异常。如果可能,您应该使用以下功能:
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); // 返回2 int num2 = std::stoi(ten_octal, 0, 8); // 返回10 long num3 = std::stol(ten_hex, 0, 16); // 返回10 long num4 = std::stol(ten_hex); // 返回0 long num5 = std::stol(ten_hex, 0, 0); // 返回10 as it detects the leading 0x