C++中stoi函数的使用详解
创作时间:
作者:
@小白创作中心
C++中stoi函数的使用详解
引用
1
来源
1.
https://www.cnblogs.com/hisun9/p/18549333
stoi函数是C++标准库中用于将字符串转换为整数的重要工具。本文将详细介绍stoi函数的原型、参数、功能、常见用法以及异常处理,并通过多个代码示例展示其具体应用。
函数原型
int stoi(const std::string& str, size_t* idx = 0, int base = 10);
idx
(可选):用来存储解析结束的位置(字符串中第一个非数字字符的索引)。如果不需要这个信息,可以传入nullptr
或省略。base
(可选):数字的进制,默认值为 10(十进制)。支持 2-36 的进制转换(注意是将base指定的进制转换为十进制,后面的常见用法里面会举一个相关的例子)。
功能描述
- 将字符串转换为整数。如果字符串中有非法字符,stoi 会抛出异常。
- 字符串可以包含前导空格和符号(+ 或 -)。
- 转换以第一个非数字字符或字符串末尾结束。
常见用法
1. 基本转换
将字符串转换为整数:
int main() {
std::string s = "123";
int num = std::stoi(s);
std::cout << "整数值: " << num << std::endl; // 输出: 123
return 0;
}
2. 转换含符号的数字
可以处理正负号:
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, 789
return 0;
}
3. 提取部分字符串
使用 idx 提取未转换的部分:
int main() {
std::string s = "123abc";
size_t idx;
int num = std::stoi(s, &idx);
std::cout << "整数值: " << num << std::endl; // 输出: 123
std::cout << "未转换部分: " << s.substr(idx) << std::endl; // 输出: abc
return 0;
}
4. 转换不同进制的数字
支持其他进制(例如二进制、十六进制等):
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; // 输出: 10
std::cout << "十六进制转整数: " << num2 << std::endl; // 输出: 31
return 0;
}
异常处理
stoi 会抛出以下异常:
std::invalid_argument
:当字符串不包含任何数字时(如 "abc")。std::out_of_range
:当结果超出 int 类型的范围。
举个例子:
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;
}
输出如下:
注意事项
- stoi 只能处理整数。如果需要转换浮点数,使用
std::stof
或std::stod
。 - stoi 是基于 std::strtol 实现的,但比 std::strtol 更易用。
热门推荐
什么叫开放漆?开放漆与封闭漆的区别及制作方法
2025年专升本考试报名人数激增,多省份公布最新数据
端州:7所学校体育场地“换新装” 促体育教育高质量发展
老上海装修风格:低调奢华的中西文化融合
7种天然“胰岛素”食物,稳血糖还能轻松减脂!快看看你吃对了吗?
如何建立作业流程规范性要求,来提升仓储作业效率?
CAD建模教程:拉伸操作详解
什么是全资子公司的定义
家常辣椒做法大全,轻松学会
深度学习中的正则化技术概述:原理与Keras实现
企业如何满足信创替代要求?关键点全解析
起源于染料的第一个抗菌药——磺胺
种植牙后的维护,你学会了吗?
新能源汽车技术专业求职者怎样写好简历
过年前腌咸鸭蛋,别再泡盐水了,教你1个土方法,30天流油起沙
桂林多个传统市场走红网络!
前置胎盘的常见致病因素不包括
保险公司理赔申诉流程:如何成功申诉及获得合理赔偿
市价买入是什么意思及操作要点?这个操作要点如何掌握?
肺结核的实验室诊断与鉴别诊断
长期遭受便秘困扰怎么办?护理专家教你几种调理方法
是调味料也是药!辣椒、生姜、葱蒜用对了美味又保健
新机制降压药涌现,高血压治疗领域迎来曙光
纪录片制作:技术与艺术的结合
数据库中的ALTER命令详解:功能、应用及最佳实践
C语言的发展历程
专家提醒:重视血管健康 及时检测和管理血管疾病
高血压必查6项揭秘,健康守护步步为营
劳动关系转移工龄怎么延续
PCT文件格式是什么?详解其定义与用途