stoi 是 C++11 标准引入的一个函数,用于将字符串转换为整数。以下是详细的解释:
基本用法
stoi 是一个标准库函数,定义在 <string> 头文件中。它的主要功能是将 std::string 或 C 风格字符串转换为 int 类型。
函数签名如下:
1
| int stoi(const std::string& str, std::size_t* pos = nullptr, int base = 10);
|
特点和注意事项
-
输入参数:
str: 要转换的字符串。
pos: 一个指向 std::size_t 的指针,用于存储第一个未处理字符的位置。如果不需要这个信息,可以传递 nullptr。
base: 基数,用于指定数字的进制,默认为 10。支持 2 到 36 之间的任何进制。
-
返回值:
-
异常处理:
std::invalid_argument: 如果字符串不包含有效的数字,将抛出该异常。
std::out_of_range: 如果转换结果超出了 int 类型的范围,将抛出该异常。
-
注意事项:
- 确保输入字符串是有效的整数表示,否则会抛出异常。
- 注意检查异常以防止程序崩溃。
stoi 仅能处理表示整数的字符串,对于浮点数转换请使用 stof、stod 或 stold。
示例代码
以下是一些使用 stoi 的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <iostream> #include <string>
int main() { std::string str = "123"; int num = std::stoi(str); std::cout << "字符串 \"" << str << "\" 转换为整数: " << num << std::endl;
try { std::string invalid_str = "abc"; int invalid_num = std::stoi(invalid_str); } catch (const std::invalid_argument& e) { std::cerr << "无效的输入字符串: " << e.what() << std::endl; }
try { std::string out_of_range_str = "99999999999999999999999999"; int out_of_range_num = std::stoi(out_of_range_str); } catch (const std::out_of_range& e) { std::cerr << "输入字符串超出范围: " << e.what() << std::endl; }
std::string hex_str = "1A"; int hex_num = std::stoi(hex_str, nullptr, 16); std::cout << "16 进制字符串 \"" << hex_str << "\" 转换为整数: " << hex_num << std::endl;
return 0; }
|
结论
stoi 是一个非常有用的函数,适用于从字符串中提取整数值。通过正确的异常处理,可以安全地使用它来处理不同格式的输入。