当前位置: 首页 > article >正文

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

        在C++中,stoito_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),默认为十进制。

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

功能与特性

  1. 基本转换

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

    • 示例:

      string s1 = "123";
      int num1 = stoi(s1);  // num1 = 123
      
      string s2 = "123abc";
      int num2 = stoi(s2);  // num2 = 123(忽略"abc")
  2. 异常处理

    • 若字符串不以数字开头(如"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;
      }
  3. 进制转换

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

    • 示例:

      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等
  • 参数:数值类型(如intdoublelong等)。

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

功能与特性

  1. 基本转换

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

    • 示例:

      int num = 456;
      string s1 = to_string(num);  // s1 = "456"
      
      double d = 3.14;
      string s2 = to_string(d);    // s2可能为"3.140000"(取决于编译器)
  2. 浮点数处理

    • C++标准未规定浮点数的具体输出格式,不同编译器可能结果不同。

    • 若需精确控制浮点格式(如保留两位小数),应使用std::ostringstream

      #include <sstream>
      double d = 3.1415;
      ostringstream oss;
      oss << fixed << setprecision(2) << d;  // 输出两位小数
      string s = oss.str();  // s = "3.14"
  3. 大数值处理

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

    • 示例:

      long long big_num = 123456789012345;
      string s3 = to_string(big_num);  // s3 = "123456789012345"

三、对比与注意事项

特性stoito_string
方向字符串 → 数值数值 → 字符串
异常可能抛出invalid_argumentout_of_range无异常
进制支持支持(2~36)仅十进制
浮点数控制不适用需手动格式化(如ostringstream

四、总结

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

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

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


http://www.kler.cn/a/596715.html

相关文章:

  • tauri2程序单例模式实现,二次点击桌面图标显示之前最小化的程序并聚焦
  • Java多线程与高并发专题——为何每次用完 ThreadLocal 都要调用 remove()?
  • 使用 pnpm 安装依赖包后,如果将依赖包直接复制内网环境中,可能会出现无法使用的情况,且不能联网下载,如何解决?
  • 《Python深度学习》第七讲:生成式深度学习
  • 2025最新智能优化算法:鹰鱼优化算法(HawkFish Optimization Algorithm,HFOA)求解23个经典函数测试集,MATLAB
  • JavaScript基础-删除事件(解绑事件)
  • Rust + 时序数据库 TDengine:打造高性能时序数据处理利器
  • Cursor的五种高级用法
  • 异地多活架构演进详解
  • 【GPT入门】第27课 Jupyter 感知到通过命令行生成的内核
  • 实验3 以太坊交易周期的需求分析
  • 菜鸟之路Day25一一前端工程化(二)
  • MATLAB深度学习全栈开发指南
  • 一键暂停更新,轻松掌控电脑节奏
  • 语法: disable_interrupts(level)
  • 通过binlog日志恢复数据库数据
  • 探秘海螺 AI 视频与计算机视觉算法的奇妙融合
  • kafka压缩
  • 基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)
  • vscode git 管理