C++:字符串和数字的转换
目录一、数字转字符串1.1)使用 std::stringstream1.2)使用 string 的内置函数1.3)string 内置的数字转字符串函数列表二、字符串转数字2.1)使用 std::stringstream2.2)使用 string 的内置函数2.3)string 内置的字符串转数字函数列表三、参考一、数字转字符串1.1)使用 std::stringstream#include <
文章共1,761字 · 阅读需要大约6分钟
一键AI生成摘要,助你高效阅读
问答
·
目录
一、数字转字符串
1.1)使用 std::stringstream
#include <iostream>
#include <sstream>
int main(int argc, char*argv[])
{
for(int i = 0; i < 5; i++)
{
std::stringstream ss;
std::string str;
ss << i;
ss >> str;
std::cout << str.data() << " ";
}
std::cout << std::endl;
return 0;
}
1.2)使用 std 的内置函数
#include <string>
#include <iostream>
int main(int argc, char*argv[])
{
for(int i = 0; i < 5; i++)
{
std::cout << std::to_string(i).data() << " ";
}
std::cout << std::endl;
return 0;
}
1.3)std 内置的数字转字符串函数列表
std::string to_string(int value);
std::string to_string(long value);
std::string to_string(long long value);
std::string to_string(unsigned value);
std::string to_string(unsigned long value);
std::string to_string(unsigned long long value);
std::string to_string(float value);
std::string to_string(double value);
std::string to_string(long double value);
二、字符串转数字
2.1)使用 std::stringstream
#include <iostream>
#include <sstream>
int main(int argc, char *argv[])
{
for(int i = 0; i < 5; i++)
{
std::stringstream ss;
std::string strNum = std::to_string(i);
int num;
ss << strNum;
ss >> num;
std::cout << num * num << " ";
}
std::cout << std::endl;
}
2.2)使用 std 的内置函数
#include <iostream>
#include <sstream>
int main(int argc, char *argv[])
{
for(int i = 0; i < 5; i++)
{
std::stringstream ss;
std::string strNum = std::to_string(i);
int num = std::stoi(strNum);
std::cout << num * num << " ";
}
std::cout << std::endl;
}
2.3)std 内置的字符串转数字函数列表
int std::stoi(const std::string& str,std::size_t* pos=0,int base = 10);
int std::stoi(const std::wstring& str,std::size_t* pos=0,int base = 10);
long std::stol(const std::string& str,std::size_t* pos=0,int base = 10);
long std::stol(const std::wstring& str,std::size_t* pos=0,int base = 10);
long long std::stoll(const std::string& str,std::size_t* pos=0,int base = 10);
long long std::stoll(const std::wstring& str,std::size_t* pos=0,int base = 10);
unsigned long stoul(const std::string& str,std::size_t* pos=0,int base = 10);
unsigned long stoul(const std::wstring& str,std::size_t* pos=0,int base = 10);
unsigned long long stoull(const std::string& str,std::size_t* pos=0,int base = 10);
unsigned long long stoull(const std::wstring& str,std::size_t* pos=0,int base = 10);
float std::stof(const std::string& str,std::size_t* pos=0);
float std::stof(const std::wstring& str,std::size_t* pos=0);
double std::stod(const std::string& str,std::size_t* pos=0);
double std::stod(const std::wstring& str,std::size_t* pos=0);
long double std::stold(const std::string& str,std::size_t* pos=0);
long double std::stold(const std::wstring& str,std::size_t* pos=0);
2.4)对 std::stringstream 进行包装
使用 template 可以对接口进行统一操作:
#include <iostream>
#include <string>
#include <sstream>
template <typename T>
T toNumber(std::string strNum)
{
T num = 0;
std::stringstream ss;
ss << strNum;
ss >> num;
return static_cast<T>(num);
}
int main(int argc, char *argv[])
{
auto num1 = toNumber<char>("0");
std::cout << "type " << typeid(num1).name() << " : " << num1 << std::endl;
auto num2 = toNumber<int>("1");
std::cout << "type " << typeid(num2).name() << " : " << num2 << std::endl;
auto num3 = toNumber<long>("2");
std::cout << "type " << typeid(num3).name() << " : " << num3 << std::endl;
std::cout << toNumber<int>("1") + toNumber<long>("2") << std::endl;
return 0;
}
运行结果:
$ ./template-string-to-number
type c : 0
type i : 1
type l : 2
3
三、参考
https://zhuanlan.zhihu.com/p/188390082
更多推荐
已为社区贡献3条内容
所有评论(0)