数与字符串相互转化

字符串转化成数

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提供更多控制,但需要注意缓冲区大小以避免溢出,并且它们不是类型安全的。

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

相关推荐
Code成立几秒前
《Java核心技术 卷I》用户图形界面鼠标事件
java·开发语言·计算机外设
luky!20 分钟前
算法--解决熄灯问题
python·算法
Xiao Fei Xiangζั͡ޓއއ20 分钟前
一觉睡醒,全世界计算机水平下降100倍,而我却精通C语言——scanf函数
c语言·开发语言·笔记·程序人生·面试·蓝桥杯·学习方法
记录无知岁月23 分钟前
【MATLAB】目标检测初探
开发语言·yolo·目标检测·matlab·yolov3·yolov2
鸽鸽程序猿25 分钟前
【算法】【优选算法】二分查找算法(下)
java·算法·二分查找算法
_OLi_27 分钟前
力扣 LeetCode 150. 逆波兰表达式求值(Day5:栈与队列)
算法·leetcode·职场和发展
远望清一色37 分钟前
基于MATLAB身份证号码识别
开发语言·图像处理·算法·matlab
NMBG221 小时前
[JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决
java·开发语言·面试·java-ee·intellij-idea
Py小趴1 小时前
Python自学之Colormaps指南
开发语言·python·数据可视化
晒足以百八十1 小时前
基于Python 和 pyecharts 制作招聘数据可视化分析大屏
开发语言·python·信息可视化