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

相关推荐
BingLin-Liu5 分钟前
蓝桥杯备考:图论之拓扑排序
算法·图论
哦吼!1 小时前
算法基础——模拟
算法
CYRUS_STUDIO3 小时前
Android 中实现一个自定义的 AES 算法
android·算法·逆向
R_.L5 小时前
C++:哈希(哈希冲突的解决)
c++·哈希算法
tangchao340勤奋的老年?7 小时前
QTcpSocket(客户端实现)多线程连接慢问题
c++·qt
ElseWhereR8 小时前
机器人能否回到原点 - 简单
c++·算法·leetcode
my_realmy9 小时前
蓝桥杯真题_小蓝和小桥的讨论
java·python·算法·职场和发展·蓝桥杯·intellij-idea
泛舟起晶浪9 小时前
海底高铁--差分
数据结构·c++·算法
带娃的IT创业者9 小时前
《Python实战进阶》No37: 强化学习入门:Q-Learning 与 DQN-加餐版1 Q-Learning算法可视化
python·算法·pygame
ゞ 正在缓冲99%…10 小时前
leetcode73.矩阵置零
java·数据结构·算法·矩阵