📜  c++ 库中的 stoi 函数 - C++ (1)

📅  最后修改于: 2023-12-03 15:14:00.193000             🧑  作者: Mango

C++ 库中的 stoi 函数

在 C++ 中,将字符串转换为整型数字是一项常见的任务。C++ 标准库中提供了一个名为 stoi 的函数,它可以方便地将字符串转换为整型数字。

函数原型
int stoi (const string& str, size_t* idx = 0, int base = 10);

stoi 函数的原型中包含三个参数:

  • str:需要转换的字符串
  • idx:可选参数,指向第一个无法转换的字符的下标
  • base:可选参数,表示进制,默认为 10。
函数说明

stoi 函数会将字符串转换为整型数字。如果字符串中的字符无法转换为数字,则函数会抛出 invalid_argument 异常。如果结果超出了 int 类型所能表示的范围,则函数会抛出 out_of_range 异常。

如果指定了 idx 参数,则函数会将第一个无法转换的字符的下标存储在该参数中。

base 参数表示进制。如果字符串以 "0x" 或 "0X" 开头,则会将其解释为十六进制数字。如果字符串以 "0" 开头,则会将其解释为八进制数字。否则,将其解释为十进制数字。

示例

下面是一些 stoi 函数的示例:

#include <string>
#include <iostream>

int main()
{
    std::string str1 = "123";
    std::string str2 = "-456";
    std::string str3 = "0x1F";
    std::string str4 = "0377";
    std::string str5 = "abc123";
    
    try {
        int num1 = std::stoi(str1);
        int num2 = std::stoi(str2);
        int num3 = std::stoi(str3, nullptr, 16);
        int num4 = std::stoi(str4, nullptr, 8);
        int num5 = std::stoi(str5); // 会抛出异常
        
        std::cout << num1 << std::endl; // 123
        std::cout << num2 << std::endl; // -456
        std::cout << num3 << std::endl; // 31
        std::cout << num4 << std::endl; // 255
    } catch (const std::exception& e) {
        std::cout << e.what() << std::endl;
    }
    
    return 0;
}

在这个示例中,我们使用了不同的字符串和进制,来测试 stoi 函数的效果。其中,输入字符串 "abc123" 被视为无法转换为数字的字符串,因此会抛出异常。

结论

C++ 标准库中的 stoi 函数可以方便地将字符串转换为整型数字,而且支持不同进制的输入。但在使用时需要注意,应该确保输入字符串能够被正确地解释为数字,否则会抛出异常。