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驾驶证新规实施,电子证件全国通,违规教育新举措,你准备好了吗?
高校继续教育瞄准“智能+”新生态
中国科学家绘制全球首个海洋最深生态系统图景,成果登上《Cell》封面
漳州古城:红砖古厝里的千年文脉
揭秘漳州古城:这座城市的灵魂地标,你了解多少?
显卡性能天梯图:一览新旧型号定位与差异
如何查询被拘留记录?多种途径和程序详解
如何评估金融产品的风险以做出明智的投资决策?这种金融产品有哪些潜在的风险?
电脑混音必备,盘点几款实用免费的混音软件推荐
浙江六和塔:天地四方的象征与历史的见证
广州高三艺考生文化课复习:巧用错题本,让薄弱科目成绩直线上升
因纠纷被对方威胁:应对策略与法律适用分析
“1-1+1”的无限循环等于几?是1还是0?其实都不对
信阳,不止信阳毛尖|故乡里的中国
如何选购高性价比的高流量手机套餐攻略
五款高抗氧化蔬菜助力控制血糖,还能抗癌!
布料发霉急救!十年专家教你高效除霉与保养秘诀
揭秘颈动脉斑块:超声检查与日常预防指南
信息安全从业者发现网站漏洞,会怎么办
欧七来了!标准全面加严还涉及电动车,国七已蠢蠢欲动?
币圈交易基础知识大全最新版(币圈新手入门教学)
宜兴三奇之首:探秘“欲界仙都”,常年温暖如春!
底漆的作用和功效是什么
冒虚汗是什么导致的?怎么调养改善?
解密数学中的“拆分术”:揭秘因式分解的奥秘
买卖合同所有权保留制度的法律解析与实务应用
保留所有权风险转移是什么
2024年最值得关注的软件开发工具与技术趋势
智慧水务中的水位监测器种类