使用stoi函数可将字符串转换为整数,需包含头文件,支持指定进制和记录转换位置;2. 示例中"12345"被成功转为整数12345。

在C++中,将字符串转换为整数是常见的操作,尤其在处理用户输入或解析文本数据时。C++提供了多种方式实现这一功能,其中最常用的是stoi函数和stringstream类。下面详细介绍它们的用法、特点及注意事项。
使用 stoi 函数转换字符串为整数
stoi 是 C++11 引入的字符串处理函数,定义在
基本语法:
int stoi(const std::string& str, size_t* pos = 0, int base = 10);- str:要转换的字符串。
- pos:可选参数,用于记录转换结束的位置(即第一个非法字符的索引)。
- base:可选参数,指定进制,默认为十进制(10),也可设为2、8、16等。
示例代码:
立即学习“C++免费学习笔记(深入)”;
std::string s = "12345";int num = stoi(s);
std::cout
如果字符串包含非数字前缀,stoi 会尝试从第一个有效数字开始转换,直到遇到非法字符。若无法转换,会抛出异常:
- 当字符串为空或不包含有效数字时,抛出 std::invalid_argument。
- 当数值超出 int 范围时,抛出 std::out_of_range。
因此建议使用 try-catch 捕获异常:
try {std::string s = "abc123";
int num = stoi(s);
} catch (const std::invalid_argument& e) {
std::cerr } catch (const std::out_of_range& e) {
std::cerr }
使用 stringstream 进行类型转换
stringstream 是 C++ 标准库中用于处理字符串流的类,定义在
基本用法步骤:
- 创建一个 stringstream 对象,并将字符串传入。
- 使用提取运算符 >> 将内容读取为整数。
- 检查转换是否成功。
示例代码:
立即学习“C++免费学习笔记(深入)”;
#includestd::string s = "456";
std::stringstream ss(s);
int num;
if (ss >> num) {
std::cout } else {
std::cout }
stringstream 的优势在于可以处理混合内容:
std::string s = "123 abc";std::stringstream ss(s);
int num;
std::string word;
ss >> num >> word;
// num = 123, word = "abc"
但要注意,stringstream 不会自动抛出异常,需手动检查状态标志,如 fail() 或 bad()。
stoi 与 stringstream 的对比
两者各有适用场景:
- stoi 更简洁,适合简单直接的字符串转整数操作,尤其是只关心结果且能处理异常的情况。
- stringstream 更灵活,适合解析复杂格式的字符串,比如带空格、多个字段或混合类型的输入。
性能方面,stoi 通常更快,因为它专为单一转换设计;而 stringstream 构造开销略大,但复用性好。
基本上就这些。根据实际需求选择合适的方法即可。注意输入验证和异常处理,避免程序崩溃。










