数与字符串相互转化

简介: 数与字符串相互转化

字符串转化成数

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

1. stoi (string to integer)

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

示例

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 类型范围时使用
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 类型的最大值时使用。

示例

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)

示例:

#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是一个更通用的工具,可以将多种类型的数据转换为字符串,也可以从字符串中读取数据。

示例:

#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库交互的情况。

示例:

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

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

目录
相关文章
|
9月前
|
算法 前端开发
根据模式串构造最小数字
根据模式串构造最小数字
61 0
给定一个正整数N,将其表示为数字1,3,7,15相加的形式输出。请编码找出使上述数字出现的总次数最少(每个数字可以重复使用)的组合。
给定一个正整数N,将其表示为数字1,3,7,15相加的形式输出。请编码找出使上述数字出现的总次数最少(每个数字可以重复使用)的组合。
|
3月前
|
Python
不同数据类型之间能否随意转化
不同数据类型之间能否随意转化。
37 5
|
9月前
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
48 0
|
存储 Python
Python实现划分数组为连续数字的集合
Python实现划分数组为连续数字的集合
122 0
|
开发框架 .NET Java
C#基础——字符串、数字之间的转换
C#基础——字符串、数字之间的转换
475 0
C#基础——字符串、数字之间的转换
计算一组数字中最小的若干个数字(Java数组和栈实现)
本文目录 1. 问题 2. 思路 2.1 思路1 2.2 思路2 2.3 思路3 3. 实现
140 0