C++如何将字符串转换为整数_C++ stoi函数与stringstream用法详解

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

在C++中,将字符串转换为整数是常见的操作,尤其在处理用户输入或解析文本数据时。C++提供了多种方式实现这一功能,其中最常用的是stoi函数和stringstream类。下面详细介绍它们的用法、特点及注意事项。

使用 stoi 函数转换字符串为整数

stoi 是 C++11 引入的字符串处理函数,定义在 头文件中,用于将 std::string 直接转换为 int 类型。

基本语法:

int stoi(const std::string& str, size_t* pos = 0, int base = 10);
  • str:要转换的字符串。
  • pos:可选参数,用于记录转换结束的位置(即第一个非法字符的索引)。
  • base:可选参数,指定进制,默认为十进制(10),也可设为2、8、16等。

示例代码:

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 对象,并将字符串传入。
  • 使用提取运算符 >> 将内容读取为整数。
  • 检查转换是否成功。

示例代码:

#include

std::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 构造开销略大,但复用性好。

基本上就这些。根据实际需求选择合适的方法即可。注意输入验证和异常处理,避免程序崩溃。