stoi 是 C++11 标准引入的一个函数,用于将字符串转换为整数。以下是详细的解释:

基本用法

stoi 是一个标准库函数,定义在 <string> 头文件中。它的主要功能是将 std::stringC 风格字符串转换为 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 之间的任何进制。
  • 返回值

    • 成功时,返回字符串转换后的 int 值。
  • 异常处理

    • std::invalid_argument: 如果字符串不包含有效的数字,将抛出该异常。
    • std::out_of_range: 如果转换结果超出了 int 类型的范围,将抛出该异常。
  • 注意事项

    • 确保输入字符串是有效的整数表示,否则会抛出异常。
    • 注意检查异常以防止程序崩溃。
    • stoi 仅能处理表示整数的字符串,对于浮点数转换请使用 stofstodstold

示例代码

以下是一些使用 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() {
// 示例 1:基本用法
std::string str = "123";
int num = std::stoi(str);
std::cout << "字符串 \"" << str << "\" 转换为整数: " << num << std::endl;

// 示例 2:处理无效输入
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;
}

// 示例 3:处理超出范围的输入
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;
}

// 示例 4:使用不同的进制
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 是一个非常有用的函数,适用于从字符串中提取整数值。通过正确的异常处理,可以安全地使用它来处理不同格式的输入。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。