stoi和stod是C++11起最常用、最简洁的字符串转数字方法,支持自动跳过前导空白、正负号、进制(stoi)和科学计数法(stod),出错时抛异常,比atoi/atof更安全可控。
用 stoi 和 stod 是 C++11 起最常用、最简洁的字符串转数字方法,它们直接处理 std::string,自动跳过前导空白,支持正负号和进制(stoi 可指定),出错时抛异常,比老式 atoi / atof 更安全可控。
stoi 把字符串解析为 int 类型。它会忽略开头的空格,读取可选的正负号,然后尽可能多地读取十进制数字(默认),直到遇到非法字符或结尾为止。
int n = stoi("123"); → 得到 123
stoi("1010", nullptr, 2) → 解析二进制,结果为 10
size_t pos; int x = stoi("42abc", &pos); → x=42,pos=2(指向 'a')std::invalid_argument;溢出则抛 std::out_of_range
stod 用于将字符串转为 double,支持科学计数法(如 "3.14"、"2e-3"、"-1.5E+2"),同样跳过前导空格,停在第一个无法识别的字符处。
double d = stod("3.14159");
size_t pos; double y = stod("2.718abc", &pos); → y=2.718,pos=5
std::invalid_argument;超出 double 表示范围抛 std::out_of_range
生产代码中不能假设输入一定合法,应捕获异常并做降级处理(如设默认值、记录日志或提示用户)。
catch (const std::out_of_range&) 表示数值太大/小,catch (const std::invalid_argument&) 表示根本不是数字格式pos 判断:转换后 pos == s.length() 才说明整个字符串都被成功解析C++ 还提供 stol(long)、stoll(long long)、stoul(unsigned long)、stof(flo
at)等,接口一致,仅返回类型不同。
stoll 替代 stoi
stof,性能略优,但精度和范围不如 stod
头文件中,无需额外链接