C++中的stoi和to_string函数详解:字符串与数值的高效转换工具
在C++中,
stoi
和to_string
是两个常用的字符串与数值类型转换函数,属于C++11标准引入的实用工具。
目录
一、stoi函数:将字符串转换为整数
函数原型
功能与特性
基本转换:
异常处理:
进制转换:
二、to_string函数:将数值转换为字符串
函数原型
功能与特性
基本转换:
浮点数处理:
大数值处理:
三、对比与注意事项
四、总结
一、stoi
函数:将字符串转换为整数
函数原型
#include <string>
int stoi(const string& str, size_t* pos = 0, int base = 10);
-
参数:
-
str
:待转换的字符串。 -
pos
(可选):输出参数,记录转换结束的位置(即第一个非数字字符的索引)。若不需要可设为nullptr
。 -
base
(可选):转换的进制(2~36),默认为十进制。
-
-
返回值:转换后的整数。
功能与特性
-
基本转换:
-
从字符串开头解析数字,直到遇到第一个无效字符或字符串结束。
-
示例:
string s1 = "123"; int num1 = stoi(s1); // num1 = 123 string s2 = "123abc"; int num2 = stoi(s2); // num2 = 123(忽略"abc")
-
-
异常处理:
-
若字符串不以数字开头(如
"abc123"
),抛出std::invalid_argument
异常。 -
若转换结果超出
int
范围(如"2147483648"
),抛出std::out_of_range
异常。 -
示例:
try { int num = stoi("abc123"); } catch (const invalid_argument& e) { cout << "错误:字符串格式无效" << endl; } catch (const out_of_range& e) { cout << "错误:数值超出int范围" << endl; }
-
-
进制转换:
-
支持二进制、十六进制等。
-
示例:
string s3 = "1010"; int num3 = stoi(s3, nullptr, 2); // 二进制转十进制,num3 = 10
-
二、to_string
函数:将数值转换为字符串
函数原型
#include <string>
string to_string(int value);
string to_string(double value); // 其他重载:long, float, unsigned等
-
参数:数值类型(如
int
,double
,long
等)。 -
返回值:数值的字符串表示。
功能与特性
-
基本转换:
-
将数值直接转换为对应的十进制字符串。
-
示例:
int num = 456; string s1 = to_string(num); // s1 = "456" double d = 3.14; string s2 = to_string(d); // s2可能为"3.140000"(取决于编译器)
-
-
浮点数处理:
-
C++标准未规定浮点数的具体输出格式,不同编译器可能结果不同。
-
若需精确控制浮点格式(如保留两位小数),应使用
std::ostringstream
:#include <sstream> double d = 3.1415; ostringstream oss; oss << fixed << setprecision(2) << d; // 输出两位小数 string s = oss.str(); // s = "3.14"
-
-
大数值处理:
-
支持大范围数值(如
long long
)的转换。 -
示例:
long long big_num = 123456789012345; string s3 = to_string(big_num); // s3 = "123456789012345"
-
三、对比与注意事项
特性 | stoi | to_string |
---|---|---|
方向 | 字符串 → 数值 | 数值 → 字符串 |
异常 | 可能抛出invalid_argument 或out_of_range | 无异常 |
进制支持 | 支持(2~36) | 仅十进制 |
浮点数控制 | 不适用 | 需手动格式化(如ostringstream ) |
四、总结
-
stoi
:用于将字符串转换为整数,需注意字符串格式和数值范围,建议配合异常处理使用。 -
to_string
:用于将数值转换为字符串,简单易用,但浮点数的格式需通过其他方式控制。
这两个函数极大简化了字符串与数值之间的转换,是C++开发中处理输入输出和数据序列化的基础工具。