答案:C++中字符串转整数常用方法包括stoi(C++11,支持多进制,抛异常)、stringstream(类型安全,兼容旧标准)、atoi(C风格,简单但不报错)和strtol(精确控制,可检测错误)。根据需求选择:简洁用stoi,兼容用stringstream或atoi,精准控制用strtol。

在C++中,将字符串转换为整数是一个常见的操作。根据不同的需求和环境,有多种方法可以实现这一功能。下面介绍几种常用且有效的方式。
1. 使用 stoi 函数(C++11及以上)
stoi 是 C++11 引入的标准库函数,位于 string 头文件中,用于将字符串转换为整数。
用法简单,适合大多数情况:
- 支持十进制、十六进制(以0x开头)、八进制(以0开头)等格式
- 遇到非法字符会抛出异常(如 std::invalid_argument 或 std::out_of_range)
// 也可以指定起始位置和进制
int hex = std::stoi("FF", nullptr, 16); // 结果为 255
2. 使用 stringstream
利用 stringstream 类进行类型转换,适用于需要与其它类型混合处理的场景。
立即学习“C++免费学习笔记(深入)”;
这种方法更安全,不会直接抛出异常,适合老标准或需要精细控制的程序。
#includestd::string str = "12345";
std::stringstream ss(str);
int num;
if (ss >> num) {
std::cout } else {
std::cout }
3. 使用 atoi 函数(C风格)
atoi 来自C语言,定义在 cstdlib 头文件中,使用简单但安全性较低。
- 不抛出异常,非法输入返回0,难以判断是否转换失败
- 性能较高,适合已知输入合法的场合
int num = std::atoi(str); // 返回 12345
4. 使用 strtol(更精确的C风格方法)
来自 cstdlib 的 strtol 提供了更强的错误检测能力。
可以获取转换结束的位置,并检查错误码。
const char* str = "12345abc";char* end;
long num = std::strtol(str, &end, 10);
if (*end == '\0') {
// 完全转换成功
} else {
// 部分或未转换,end指向第一个非法字符
}
基本上就这些常用方法。选择哪种方式取决于你的项目要求:追求简洁用 stoi,注重兼容性可用 stringstream 或 atoi,需要精确控制则推荐 strtol。注意处理异常和边界情况,避免程序崩溃。不复杂但容易忽略。











