字符串转化成数
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);
- 适用场景:适合转换非常大的整数,当字符串可能表示的整数超过
int
或long
类型的最大值时使用。
示例
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. 使用sprintf
或snprintf
这些是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
更为灵活,支持多种类型,还可以进行格式化输出。sprintf
和snprintf
提供更多控制,但需要注意缓冲区大小以避免溢出,并且它们不是类型安全的。
取决于性能、代码简洁性或灵活性等