数与字符串相互转化

字符串转化成数

stoi, stol, 和 stoll 都是C++标准库中的函数,用于将字符串转换为整数类型。它们的主要区别在于转换后得到的整数类型不同,以及适用的场景也因此有所差异。

1. stoi (string to integer)

  • 功能 :将字符串转换为 int 类型的整数。
  • 原型int stoi(const std::string& str, size_t* pos = nullptr, int base = 10);
  • 适用场景 :当你确定字符串表示的整数范围在 int 类型的范围内时使用。

示例

cpp 复制代码
std::string strNum = "123";
int num = std::stoi(strNum);

2. stol (string to long)

  • 功能 :将字符串转换为 long 类型的整数。
  • 原型long stol(const std::string& str, size_t* pos = nullptr, int base = 10);
  • 适用场景 :当需要更大的整数范围,且确定字符串表示的整数不超过 long 类型范围时使用
cpp 复制代码
std::string strLong = "1234567890";
long longNum = std::stol(strLong);

3. stoll (string to long long)

  • 功能 :将字符串转换为 long long 类型的整数。
  • 原型long long stoll(const std::string& str, size_t* pos = nullptr, int base = 10);
  • 适用场景 :适合转换非常大的整数,当字符串可能表示的整数超过 intlong 类型的最大值时使用。

示例

cpp 复制代码
std::string strBigNum = "1234567890123456789";
long long bigNum = std::stoll(strBigNum);

相似函数运用

除了上述三个函数,还有其他几个相似的函数用于不同类型的转换:

  • stoul (string to unsigned long):将字符串转换为无符号长整型。
  • stoull (string to unsigned long long):将字符串转换为无符号长整型的长整型。
  • stof (string to float):将字符串转换为浮点数。
  • stod (string to double):将字符串转换为双精度浮点数。
  • stold (string to long double):将字符串转换为长双精度浮点数。

转换的目标数据类型不同,以及需要根据实际情况选择合适的转换函数以确保数据的精确性和安全性 。使用时还需要注意错误处理,例如检查转换是否成功以及是否溢出等问题

数转换成字符串

1. 使用std::to_string函数

C++11引入了to_string函数,这是一个简单直接的方法来将基本数据类型转换为字符串。

  • 整数std::to_string(int val)
  • 浮点数std::to_string(double val)
  • 无符号整数std::to_string(unsigned int val)

示例:

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;
int main() {
    int num = 123;
    double pi = 3.14;
    cout << "Integer to string: " << to_string(num) << endl;
    cout << "Double to string: " << to_string(pi) << endl;
    return 0;
}

2. 使用std::stringstream

std::stringstream是一个更通用的工具,可以将多种类型的数据转换为字符串,也可以从字符串中读取数据。

示例:

cpp 复制代码
#include <iostream>
#include <sstream>
#include <string>
int main() {
    int num = 456;
    std::stringstream ss;
    ss << num; // 将整数转换为字符串
    std::string strNum = ss.str();
    std::cout << "Using stringstream: " << strNum << std::endl;
    return 0;
}

3. 使用sprintfsnprintf

这些是C语言中的函数,但在C++中也可以使用,尤其适合于需要更多控制或与C库交互的情况。

示例:

cpp 复制代码
#include <cstdio>
#include <iostream>
#include <string>
int main() {
    int value = 789;
    char buffer[32]; // 确保足够大以容纳转换后的字符串和终止符
    std::sprintf(buffer, "%d", value); // 将整数转换为字符串
    std::string strBuffer(buffer);
    std::cout << "Using sprintf: " << strBuffer << std::endl;
    return 0;
}

注意事项

  • 使用std::to_string是最简洁的方式,适用于大多数基本类型,但不支持自定义类型。
  • std::stringstream更为灵活,支持多种类型,还可以进行格式化输出。
  • sprintfsnprintf提供更多控制,但需要注意缓冲区大小以避免溢出,并且它们不是类型安全的。

取决于性能、代码简洁性或灵活性等

相关推荐
山登绝顶我为峰 3(^v^)330 分钟前
如何录制带备注的演示文稿(LaTex Beamer + Pympress)
c++·线性代数·算法·计算机·密码学·音视频·latex
Two_brushes.2 小时前
【算法】宽度优先遍历BFS
算法·leetcode·哈希算法·宽度优先
Python×CATIA工业智造3 小时前
Frida RPC高级应用:动态模拟执行Android so文件实战指南
开发语言·python·pycharm
十五年专注C++开发3 小时前
CMake基础:条件判断详解
c++·跨平台·cmake·自动化编译
我叫小白菜4 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
森焱森4 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
狐凄4 小时前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
weixin_446122465 小时前
JAVA内存区域划分
java·开发语言·redis
悦悦子a啊5 小时前
Python之--基本知识
开发语言·前端·python
QuantumStack6 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法