stoi函数介绍

news/2025/1/14 1:23:26/文章来源:https://www.cnblogs.com/hisun9/p/18549333

stoi 是 C++ 标准库中的一个函数,定义在头文件 <string> 中,它用于将字符串转换为整数类型。

函数原型

int stoi(const std::string& str, size_t* idx = 0, int base = 10);
  • str(必选):要转换的字符串,必须以数字开头(可以包含正负号)。

    插一句题外话

    如果不以数字开头,会这样:

    img

  • idx(可选):用来存储解析结束的位置(字符串中第一个非数字字符的索引)。如果不需要这个信息,可以传入 nullptr 或省略。

  • base(可选):数字的进制,默认值为 10(十进制)。支持 2-36 的进制转换(注意是将base指定的进制转换为十进制,后面的常见用法里面会举一个相关的例子)。

功能描述

  • 将字符串转换为整数。如果字符串中有非法字符,stoi 会抛出异常。

  • 字符串可以包含前导空格和符号(+ 或 -)。

  • 转换以第一个非数字字符或字符串末尾结束。

常见用法

1. 基本转换

将字符串转换为整数:

#include <iostream>
#include <string>int main() {std::string s = "123";int num = std::stoi(s);std::cout << "整数值: " << num << std::endl; // 输出: 123return 0;
}

2. 转换含符号的数字

可以处理正负号:

#include <iostream>
#include <string>int main() {std::string s1 = "-456";std::string s2 = "+789";int num1 = std::stoi(s1);int num2 = std::stoi(s2);std::cout << num1 << ", " << num2 << std::endl; // 输出: -456, 789return 0;
}

3. 提取部分字符串

使用 idx 提取未转换的部分:

#include <iostream>
#include <string>int main() {std::string s = "123abc";size_t idx;int num = std::stoi(s, &idx);std::cout << "整数值: " << num << std::endl;       // 输出: 123std::cout << "未转换部分: " << s.substr(idx) << std::endl; // 输出: abcreturn 0;
}

4. 转换不同进制的数字

支持其他进制(例如二进制、十六进制等):

#include <iostream>
#include <string>int main() {std::string binary = "1010";  // 二进制字符串std::string hex = "1F";       // 十六进制字符串int num1 = std::stoi(binary, nullptr, 2); // 二进制转换int num2 = std::stoi(hex, nullptr, 16);   // 十六进制转换std::cout << "二进制转整数: " << num1 << std::endl; // 输出: 10std::cout << "十六进制转整数: " << num2 << std::endl; // 输出: 31return 0;
}

异常处理

stoi 会抛出以下异常:

  • std::invalid_argument:当字符串不包含任何数字时(如 "abc")。

  • std::out_of_range:当结果超出 int 类型的范围。

举个例子

#include <iostream>
#include <string>int main() {try {std::string invalid = "abc";int num = std::stoi(invalid); // 抛出 std::invalid_argument} catch (const std::invalid_argument& e) {std::cout << "无效输入: " << e.what() << std::endl;}try {std::string too_large = "9999999999999999999";int num = std::stoi(too_large); // 抛出 std::out_of_range} catch (const std::out_of_range& e) {std::cout << "超出范围: " << e.what() << std::endl;}return 0;
}

输出如下:

img

注意事项

  • stoi 只能处理整数。如果需要转换浮点数,使用 std::stofstd::stod

  • stoi 是基于 std::strtol 实现的,但比 std::strtol 更易用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集与融合技术-第四次实践作业

gitee链接:作业4 作业①: 要求: 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:http://quote.eastmoney.co…

团队作业4——项目冲刺-第六篇

团队作业4——项目冲刺-第六篇这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <作业要求>这个作业的目标 修改完善需求规格说明书、系统设计、Alpha任务分配计划、测试计划GitHub 链接 https://github.com/tangliweiwww/ChatGpt🍟一、团队 1.团队名称:…

20222306 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工…

playwright ubuntu 出现 playwright._impl._errors.TimeoutError: Locator.click: Timeout 30000ms exceeded

win系统上正常, ubuntu报错 如下报错:解决Linux环境是英文browser.new_context(locale="zh-CN")本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18549315

【ARM CoreLink 系列 1 -- SoC 架构 总线 互联(interconnect) 介绍】

概述 在 摩尔定律 的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了通信、图像、计算、消费电子等领域的众多挑战性的难题。随…

golang: 在线上用nginx部署应用

一,启动应用: 1,编译程序 $ go build 2,用nohup启动应用的二进制程序 $ nohup /data/goapp/industry/industry >> /data/logs/gologs/back.log 2>&1 & [1] 4896 3,检查应用是否启动: $ ss -lntp | grep 3000 LISTEN 0 4096 0.0.0.0:3000 …

go fiber:路由中间件

一,目录结构:二,代码 1,中间件代码 package middlewareimport ("fmt""github.com/gofiber/fiber/v2""industry/config" )// token校验 func CheckUser(c *fiber.Ctx) error {token:=c.Query("token")fmt.Println("token:"…

20222327 2024-2025-1 《网络与系统攻防技术》实验六实验报告

一、实验内容 学习掌握了Metasploit工具的使用,具体的操作总结来说就是Search-Use-Show-Set-Exploit/run 学习了利用相关漏洞进行模拟攻击的操作,对防范恶意攻击有了一些认识(安装杀软,不要点击陌生网站、文件链接等) 二、实验过程 1、前期渗透 ①主机发现(可用Aux中的ar…

快速量产低功耗 4G 定位方案?Air201 模组来搞定!

今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获。今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获。 寻寻觅觅低功耗4G定位方案? 一个Air201就够了! ——定位准、体积小、功耗低,助力行业客户快速量产! 01 Air201是…

如何挑选海外4G模组?这里有秘籍!

今天我会告诉大家如何挑选海外4G模组,我会把优势给贴出作为参考。去过国外的都知道国外4G网络各种状况实在让人无力吐槽,做海外设备的朋友,是时候了解一下Air780EEN/EEU/EEJ系列海外模组——集成vSIM功能,最大程度解决海外联网稳定性的问题。今天我会告诉大家如何挑选海外4…

无线基础配置

所需配置 AC1 [AC6605]vlan batch 10 20 100 [AC6605]interface GigabitEthernet 0/0/1 [AC6605-GigabitEthernet0/0/1]port link-type trunk[AC6605-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 100 [AC6605]interface Vlanif 100 [AC6605-Vlanif100]ip address 1…

基于YOLO实现滑块验证码破解

申明:本案例中的思路和技术仅用于学习交流。请勿用于非法行为。 一、训练模型 详细训练步骤和导出模型参考 滑块验证码识别模型训练 二、模型试用 通过YoloDotNet运行模型,计算出滑块缺口位置后用RESTful格式的接口返回坐标给其它应用调用。YoloDotNet案例参考 物体检测框架Y…