答案:C++中字符串转整数常用方法有std::stoi(简洁但需异常处理)、std::stringstream(类型安全、可检测部分转换)、atoi(简单但错误难察觉)和std::from_chars(高性能、C++17推荐)。

在C++中,将字符串(std::string)转换为整数(int)是常见的操作,尤其在处理用户输入、读取配置文件或解析数据时非常实用。本文介绍几种常用且可靠的字符串转整数的方法,并说明它们的优缺点和使用场景。
1. 使用 std::stoi 函数(C++11 起)
std::stoi 是最简单直接的方式之一,定义在 头文件中,用于将字符串转换为 int 类型。
基本用法:
std::string str = “123”;
int num = std::stoi(str);
优点:
立即学习“C++免费学习笔记(深入)”;
语法简洁,易于使用支持十进制、十六进制(加 0x 前缀)、八进制(加 0 前缀)等格式可指定起始位置和进制(如二进制、八进制)
注意事项:
如果字符串为空或无法转换,会抛出 std::invalid_argument 异常如果数值超出 int 范围,会抛出 std::out_of_range 异常建议使用 try-catch 捕获异常以增强健壮性try {
int num = std::stoi(“abc”);
} catch (const std::invalid_argument& e) {
std::cout } catch (const std::out_of_range& e) {
std::cout }
2. 使用 std::stringstream
stringstream 是传统而灵活的方法,适用于需要类型安全转换或与其他类型混合处理的场景。
基本用法:
#include
std::string str = “456”;
std::stringstream ss(str);
int num;
ss >> num;
优点:
立即学习“C++免费学习笔记(深入)”;
类型安全,不会自动忽略非法字符可以结合判断流状态来检测转换是否成功适合复杂格式解析(如提取多个值)
检查转换是否成功:
if (ss.fail()) {
std::cout } else if (!ss.eof()) {
std::cout }
3. 使用 atoi 函数(C 风格)
atoi 来自 C 语言标准库,声明在 中,接受 const char* 类型。
基本用法:
std::string str = “789”;
int num = std::atoi(str.c_str());
优点:
立即学习“C++免费学习笔记(深入)”;
简单快捷,无需异常处理兼容性好,适用于老项目
缺点:
遇到非法字符时返回 0,无法区分 “0” 和错误情况不抛出异常,错误难以察觉不推荐在新代码中使用,除非对性能要求极高且输入可控
4. 使用 std::from_chars(C++17 起)
std::from_chars 是 C++17 引入的高性能无异常方法,位于 头文件中。
基本用法:
#include
#include
std::string str = “1234”;
int num;
auto result = std::from_chars(str.data(), str.data() + str.size(), num);
if (result.ec == std::errc()) {
std::cout } else {
std::cout }
优点:
立即学习“C++免费学习笔记(深入)”;
零开销,不抛异常,性能极高精确控制解析范围错误码机制清晰可靠
适用场景: 对性能敏感的程序,如游戏引擎、高频交易系统等。
基本上就这些常见方式。选择哪种方法取决于你的编译器支持、性能需求和错误处理策略。日常开发推荐使用 std::stoi,追求性能选 std::from_chars,维护旧代码可能遇到 atoi 或 stringstream。不复杂但容易忽略异常和边界处理。
以上就是C++ string转int详解_C++字符串转整数的几种方式的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1486996.html
微信扫一扫
支付宝扫一扫