C++中string转int常用方法包括:1. std::stoi,简洁但需异常处理;2. std::istringstream,类型安全但性能较低;3. atoi,简单但无错误反馈;4. std::from_chars(C++17),高效且无异常,推荐高性能场景使用。

在C++中,将string转换为int有多种方式,选择合适的方法取决于你的需求,比如是否需要错误处理、性能要求或兼容性。以下是几种常用且可靠的实现方法。
1. 使用 std::stoi
std::stoi(string to integer)是C++11引入的最简单直接的方法,能将字符串转换为整数。
示例:#include#include int main() { std::string str = "12345"; try { int num = std::stoi(str); std::cout << "转换结果: " << num << std::endl; } catch (const std::invalid_argument& e) { std::cerr << "无效参数: " << e.what() << std::endl; } catch (const std::out_of_range& e) { std::cerr << "数值超出范围: " << e.what() << std::endl; } return 0; }
优点:语法简洁,自动跳过前导空格,支持十进制、十六进制(以0x开头)等格式。
注意:可能抛出异常,需用try-catch处理非法输入或溢出。
2. 使用 std::istringstream
利用输入字符串流进行类型转换,适合在复杂解析场景中使用。
示例:#include#include #include int main() { std::string str = "67890"; std::istringstream iss(str); int num; if (iss >> num) { std::cout << "转换成功: " << num << std::endl; } else { std::cerr << "转换失败" << std::endl; } return 0; }
优点:类型安全,可结合其他类型读取;
缺点:相对繁琐,性能略低。
3. 使用 atoi
atoi来自C标准库,接受const char*,不抛异常,转换失败返回0。
立即学习“C++免费学习笔记(深入)”;
示例:#include#include #include int main() { std::string str = "42"; int num = std::atoi(str.c_str()); std::cout << "结果: " << num << std::endl; return 0; }
优点:简单快速,无需异常处理;
缺点:无法区分“0”和转换失败,缺乏错误反馈,不推荐用于健壮程序。
4. 使用 std::from_chars(C++17起)
现代C++推荐方式,高效且无异常,适用于高性能场景。
示例:#include#include #include #include int main() { std::string str = "1000"; int value; auto result = std::from_chars(str.data(), str.data() + str.size(), value); if (result.ec == std::errc()) { std::cout << "转换成功: " << value << std::endl; } else { std::cerr << "转换失败" << std::endl; } return 0; }
优点:零开销抽象,不抛异常,速度快;
缺点:语法稍复杂,仅C++17及以上支持。
基本上就这些常见的方法。日常开发推荐使用std::stoi(注意异常处理),对性能敏感的场景可选用std::from_chars。避免在关键逻辑中使用atoi,因其错误处理能力太弱。











