C++中的stoi和to_string函数详解:字符串与数值的高效转换工具

在C++中,stoi和to_string是两个常用的字符串与数值类型转换函数,属于C++11标准引入的实用工具。


目录

一、stoi函数:将字符串转换为整数

函数原型

功能与特性

基本转换:

异常处理:

进制转换:

二、to_string函数:将数值转换为字符串

函数原型

功能与特性

基本转换:

浮点数处理:

大数值处理:

三、对比与注意事项

四、总结


一、stoi函数:将字符串转换为整数

函数原型

cpp 复制代码
#include <string>
int stoi(const string& str, size_t* pos = 0, int base = 10);
  • 参数:

    • str:待转换的字符串。

    • pos(可选):输出参数,记录转换结束的位置(即第一个非数字字符的索引)。若不需要可设为nullptr。

    • base(可选):转换的进制(2~36),默认为十进制。

  • 返回值:转换后的整数。

功能与特性

基本转换:

  • 从字符串开头解析数字,直到遇到第一个无效字符或字符串结束。

  • 示例:

    cpp 复制代码
    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异常。

  • 示例:

    cpp 复制代码
    try {
        int num = stoi("abc123");
    } catch (const invalid_argument& e) {
        cout << "错误:字符串格式无效" << endl;
    } catch (const out_of_range& e) {
        cout << "错误:数值超出int范围" << endl;
    }

进制转换:

  • 支持二进制、十六进制等。

  • 示例:

    cpp 复制代码
    string s3 = "1010";
    int num3 = stoi(s3, nullptr, 2);  // 二进制转十进制,num3 = 10

二、to_string函数:将数值转换为字符串

函数原型

cpp 复制代码
#include <string>
string to_string(int value);
string to_string(double value);  // 其他重载:long, float, unsigned等
  • 参数 :数值类型(如int, double, long等)。

  • 返回值:数值的字符串表示。

功能与特性

基本转换:

  • 将数值直接转换为对应的十进制字符串。

  • 示例:

    cpp 复制代码
    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:

    cpp 复制代码
    #include <sstream>
    double d = 3.1415;
    ostringstream oss;
    oss << fixed << setprecision(2) << d;  // 输出两位小数
    string s = oss.str();  // s = "3.14"

大数值处理:

  • 支持大范围数值(如long long)的转换。

  • 示例:

    cpp 复制代码
    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++开发中处理输入输出和数据序列化的基础工具。

相关推荐
别动我齐刘海17 分钟前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
171320330计算机毕设编程17 分钟前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生30 分钟前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
不会就选b35 分钟前
算法日常・每日刷题--<动态规划>23
算法·动态规划
GreatSQL社区1 小时前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
ZZHow10241 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
Tisfy2 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
lojox2 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
微笑星河q3 小时前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++