0
点赞
收藏
分享

微信扫一扫

Java基础第一天(实训学习整理资料(一))

何晓杰Dev 2024-11-02 阅读 21

参考:C++(stoi())

文章目录


在C++中, stoi() 是一个标准库函数,用于将字符串( std::string 或 C 风格字符串)转换为整数( int)。这个函数定义在 <string> 头文件中。是 C++11 引入的一个标准库函数,用于将字符串转换为整数。与 atoi() 不同,stoi() 提供了更强的功能,包括错误处理、支持指定进制等。

函数原型

int stoi(const std::string& str, std::size_t* idx = nullptr, int base = 10);

参数

  • str:要转换的字符串。
  • idx:一个可选参数,指向 std::size_t 类型的指针。如果提供,函数会将转换停止的位置(即第一个不是有效数字的字符的索引)存储在这个指针指向的位置。如果转换失败,idx 将被设置为 0。如果转换成功,但字符串中没有非数字字符,idx 将被设置为字符串的长度。
  • base:一个可选参数,指定了要转换的字符串的数制(基数)。它必须是2到36之间的整数。如果设置为0,函数会根据字符串的前缀自动确定数制(例如,“0x” 或 “0X” 表示十六进制,“0” 表示八进制)。

返回值

  • 返回转换后的整数。

使用示例

示例1:基本使用

#include <iostream>
#include <string>

int main() {
    std::string str = "456";
    try {
        int num = std::stoi(str);
        std::cout << "转换结果: " << num << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cout << "无效的输入: " << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cout << "数值超出范围: " << e.what() << std::endl;
    }
    return 0;
}

在这个示例中,我们只使用了 std::stoi 的第一个参数,将字符串 “456” 转换为整数 456。

示例2:使用 idx 参数

#include <iostream>
#include <string>

int main() {
    std::string str = "123abc";
    std::size_t idx;
    try {
        int num = std::stoi(str, &idx);
        std::cout << "转换结果: " << num << std::endl;
        std::cout << "转换停止位置: " << idx << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cout << "无效的输入: " << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cout << "数值超出范围: " << e.what() << std::endl;
    }
    return 0;
}

在这个示例中,我们使用了 std::stoi 的第二个参数 idx,它存储了转换停止的位置,即字符串中 “123” 之后的字符 ‘a’ 的索引。

示例3:使用 base 参数

#include <iostream>
#include <string>

int main() {
    std::string str = "1a2";
    try {
        int num = std::stoi(str, nullptr, 16); // 将字符串视为十六进制数
        std::cout << "十六进制转换结果: " << num << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cout << "无效的输入: " << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cout << "数值超出范围: " << e.what() << std::endl;
    }
    return 0;
}

在这个示例中,我们使用了 std::stoi 的第三个参数 base,将字符串 “1a2” 视为十六进制数进行转换。

异常

如果转换失败(例如,字符串不包含有效的整数),stoi() 会抛出一个 std::invalid_argument 异常。如果转换后的数字超出了 int 类型的范围,会抛出 std::out_of_range 异常。

注意事项

  • 确保字符串只包含有效的数字字符,否则 stoi() 会抛出异常。
  • 如果需要处理可能抛出的异常,应该使用 try-catch 块来捕获这些异常。
  • 如果输入的字符串不是有效的整数表示,std::stoi 会抛出 std::invalid_argument 异常。
  • 如果字符串表示的数值超出了 int 类型的范围,std::stoi 会抛出 std::out_of_range 异常。
  • 使用 idx 参数时,如果转换失败,idx 将被设置为 0。
  • 使用 base 参数时,如果设置为0,函数会根据字符串的前缀自动确定数制。如果字符串以 “0x” 或 “0X” 开头,表示十六进制;如果以 “0” 开头,表示八进制;否则,表示十进制。
举报

相关推荐

Java基础学习第一天

学习java 第一天

第一天学习

rhcsa 第一天基础命令整理总结

Java第一天

JAVA第一天

0 条评论