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

在C++中,stoito_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_argumentout_of_range 无异常
进制支持 支持(2~36) 仅十进制
浮点数控制 不适用 需手动格式化(如ostringstream

四、总结

  • stoi:用于将字符串转换为整数,需注意字符串格式和数值范围,建议配合异常处理使用。

  • to_string:用于将数值转换为字符串,简单易用,但浮点数的格式需通过其他方式控制。

这两个函数极大简化了字符串与数值之间的转换,是C++开发中处理输入输出和数据序列化的基础工具。

相关推荐
阳明山水15 分钟前
Mamba与两阶段XGBoost的融合架构:面向间歇性需求的双路径预测框架
人工智能·深度学习·算法·机器学习·架构
水上冰石23 分钟前
【MuJoCo从入门到精通】第2章 第一个 MuJoCo 仿真
前端·人工智能·算法
wenyq725 分钟前
LeetCode 2904. Shortest and Lexicographically Smallest Beautiful String
算法·leetcode
维克兜率天37 分钟前
【维克】技术指标是什么:从均线到MACD的数学原理
人工智能·笔记·python·算法·量化
Messy create41 分钟前
【储能系统三大核心】
网络·stm32·单片机·算法·能源
一木 之林1 小时前
C/C++ 面向对象编程(OOP)(进阶)
java·c语言·c++
sel_91 小时前
【vLLM】vLLM 推理框架详解:从 PagedAttention 到生产级部署实战
人工智能·深度学习·算法·语言模型·框架·vllm
XR1234567881 小时前
办公大楼组网选型决策树:TCO 与三大品牌优劣对比总结
算法·决策树·机器学习
阳明山水1 小时前
Mamba路径如何建模长程时序依赖
人工智能·深度学习·算法·机器学习·架构
千谦阙听2 小时前
C++篇:类和对象(上)
开发语言·c++