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

相关推荐
akunkuntaimei5 分钟前
2026年高考数学各省真题及答案(完整版)
算法·高考
Hello:CodeWorld1 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi82 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
搬砖魁首3 小时前
基础能力系列 - 多线程2 - 条件变量
c++·rust·条件变量·原子类型·线程同步互斥
youngerwang3 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
chase_my_dream3 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
牛油果子哥q3 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
KaMeidebaby3 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
手写码匠4 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力5 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试