在C++编程中,字符串转整型是高频出现的操作需求,比如处理用户输入的数字字符串、解析配置文件中的数值参数等场景都需要用到。不同的转换方法有不同的适用场景和特性,掌握多种实现方式能让开发更灵活。

stoi方法转换string为int
stoi是C++11标准引入的字符串转换函数,专门用于把字符串转换为整型,使用起来非常简便,不需要额外的头文件引入,只要包含<string>即可使用。
基本使用语法
stoi的函数原型为int stoi(const string& str, size_t* idx = 0, int base = 10),其中str是要转换的字符串,idx是可选参数,用来存储转换结束的位置,base是进制参数,默认是10进制。
代码示例
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "123";
string str2 = "456abc"; // 字符串开头是数字,后面有非数字字符也可以转换
string str3 = "0x1A"; // 十六进制字符串
int num1 = stoi(str1);
int num2 = stoi(str2);
int num3 = stoi(str3, nullptr, 16); // 指定16进制转换
cout << "num1: " << num1 << endl;
cout << "num2: " << num2 << endl;
cout << "num3: " << num3 << endl;
return 0;
}
注意事项
- 如果字符串开头没有可转换的数字,stoi会抛出
invalid_argument异常 - 如果转换后的数值超出int范围,会抛出
out_of_range异常,使用时建议做好异常处理 - 只支持C++11及以上标准,老版本编译器可能无法使用
stringstream方法转换string为int
stringstream是C++标准库中的字符串流类,位于<sstream>头文件中,通过流操作可以实现字符串到整型的转换,兼容性比stoi更好,支持更早的C++标准。
基本使用步骤
首先创建stringstream对象,把要转换的字符串传入对象,再通过流提取运算符把内容读取到整型变量中,最后判断转换是否成功即可。
代码示例
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string str1 = "123";
string str2 = "abc"; // 无法转换的字符串
int num1, num2;
// 转换str1
stringstream ss1(str1);
ss1 >> num1;
if (!ss1.fail()) {
cout << "str1转换成功: " << num1 << endl;
} else {
cout << "str1转换失败" << endl;
}
// 转换str2
stringstream ss2(str2);
ss2 >> num2;
if (!ss2.fail()) {
cout << "str2转换成功: " << num2 << endl;
} else {
cout << "str2转换失败" << endl;
}
return 0;
}
注意事项
- 转换失败时不会抛出异常,而是通过fail()函数返回状态,需要手动判断转换结果
- 如果字符串开头是数字后面有非数字字符,会转换开头的数字部分,剩余字符留在流中
- 重复使用时需要调用clear()方法重置流状态,否则会影响后续转换
两种方法对比
| 对比维度 | stoi方法 | stringstream方法 |
|---|---|---|
| 标准支持 | C++11及以上 | 几乎所有C++标准 |
| 异常处理 | 转换失败抛异常 | 转换失败返回失败状态 |
| 使用复杂度 | 一行代码即可完成 | 需要多行代码和状态判断 |
| 进制支持 | 原生支持多进制转换 | 默认只支持10进制,多进制需要额外处理 |
如果开发环境支持C++11及以上标准,优先选择stoi方法,代码更简洁;如果是老项目或者需要更好的兼容性,选择stringstream方法更稳妥。两种都是C++中字符串转整型的可靠方案,开发者可以根据实际需求选择。
c++stoistringstreamstring转int修改时间:2026-07-10 22:27:25