c++中stoi函数的使用小结

 更新时间:2026年02月02日 09:08:35   作者:crane_in_sky  
本文主要介绍了c++中stoi函数的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

std::stoi是C++标准库中的一个函数,用于将字符串转换为整数类型。它的全名是std::string to int,所以stoi就是string to int的缩写。

函数原型如下:

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

参数解释:

  • str:要转换的字符串。
  • pos:可选参数,表示转换后的字符串的结束位置。如果提供了这个参数,函数会将转换后的字符串的结束位置存储在它所指向的位置上。
  • base:可选参数,用于指定字符串表示的数的进制。默认值是10。

函数功能: std::stoi会从字符串的开头开始,依次读取字符,直到遇到非数字字符或字符串结束。它将读取到的数字字符解析为整数,并返回转换后的整数值。

如果字符串中的第一个字符是非数字字符,或者字符串为空,或者不包含任何数字字符,std::stoi会抛出一个std::invalid_argument异常。如果转换后的整数值超出了所表示的整数类型的范围,std::stoi会抛出一个std::out_of_range异常。

示例用法:

#include <iostream>
#include <string>

int main() {
    std::string str = "12345";
    int num = std::stoi(str);
    std::cout << num << std::endl;  // 输出:12345
    return 0;
}

上述代码将字符串"12345"转换为整数12345,并输出结果。

示例2:使用 idx 参数

#include &lt;iostream&gt;
#include &lt;string&gt;

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

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

示例3:使用 base 参数

#include &lt;iostream&gt;
#include &lt;string&gt;

int main() {
    std::string str = "1a2";
    try {
        int num = std::stoi(str, nullptr, 16); // 将字符串视为十六进制数
        std::cout &lt;&lt; "十六进制转换结果: " &lt;&lt; num &lt;&lt; std::endl;
    } catch (const std::invalid_argument&amp; e) {
        std::cout &lt;&lt; "无效的输入: " &lt;&lt; e.what() &lt;&lt; std::endl;
    } catch (const std::out_of_range&amp; e) {
        std::cout &lt;&lt; "数值超出范围: " &lt;&lt; e.what() &lt;&lt; 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” 开头,表示八进制;否则,表示十进制。

到此这篇关于c++中stoi函数的使用小结的文章就介绍到这了,更多相关c++ stoi函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现LeetCode(904.水果装入果篮)

    C++实现LeetCode(904.水果装入果篮)

    这篇文章主要介绍了C++实现LeetCode(904.水果装入果篮),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现访问者模式的基础介绍

    C++实现访问者模式的基础介绍

    访问者模式表示一个作用于某对象结构中各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。对C++访问者模式相关知识感兴趣的朋友一起看看吧
    2021-09-09
  • C/C++: Inline function, calloc 对比 malloc

    C/C++: Inline function, calloc 对比 malloc

    以下是对c/c++中的malloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下
    2016-07-07
  • C++中const char*、char const*、char * const三者的区别

    C++中const char*、char const*、char * const三者的区别

    这篇文章主要介绍了C++中const char*、char const*、char * const三者的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C语言堆结构处理TopK问题详解

    C语言堆结构处理TopK问题详解

    TopK问题即在N个数中找出最大的前K个,这篇文章将详细讲解如何利用小根堆的方法解决TopK问题,文中代码具有一定参考价值,快跟随小编一起学习一下吧
    2022-06-06
  • C++中char*转换为LPCWSTR的解决方案

    C++中char*转换为LPCWSTR的解决方案

    最近在学习C++,遇到了一个char*转换为LPCWSTR的问题,通过查找资料终于解决了,所以下面这篇文章主要介绍了C++中char*转LPCWSTR的解决方案,文中通过详细的示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • C++无法从“const char[ ]”转换为“char *”问题及解决

    C++无法从“const char[ ]”转换为“char *”问题及解决

    这篇文章主要介绍了C++无法从“const char[ ]”转换为“char *”问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    这篇文章主要介绍了stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列),需要的朋友可以参考下
    2014-05-05
  • C++遍历文件夹下文件的方法

    C++遍历文件夹下文件的方法

    这篇文章主要介绍了C++遍历文件夹下文件的方法,实例分析了C++针对文件夹遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C++ sleep()和usleep()的区别

    C++ sleep()和usleep()的区别

    本文主要介绍了C++ sleep()和usleep()的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论