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

相关推荐
爱的叹息1 小时前
【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
java·算法·排序算法
写个博客2 小时前
代码随想录算法训练营第二十一天
算法
小王C语言2 小时前
【C++初阶】--- list容器功能模拟实现
c++·windows·list
keep intensify3 小时前
杨氏矩阵、字符串旋转、交换奇偶位,offsetof宏
c语言·开发语言·数据结构·算法·矩阵
enyp803 小时前
c++ 类和动态内存分配
java·开发语言·c++
hy____1234 小时前
string类(详解)
开发语言·c++
Naxx Crazy4 小时前
SimBody安装
c++·仿真·simbody·多体动力学库
爱是小小的癌4 小时前
[第十六届蓝桥杯 JavaB 组] 真题 + 经验分享
经验分享·算法·蓝桥杯
靡樊4 小时前
Linux:进程间通信
linux·服务器·c++·学习
自由鬼6 小时前
AI当前状态:有哪些新技术
人工智能·深度学习·算法·ai·chatgpt·deepseek