当前位置: 代码网 > it编程>编程语言>C/C++ > c++中stoi函数的使用小结

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

2026年02月02日 C/C++ 我要评论
std::stoi是c++标准库中的一个函数,用于将字符串转换为整数类型。它的全名是std::string to int,所以stoi就是string to int的缩写。函数原型如下:int sto

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函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com