目录

一、数字转字符串

1.1)使用 std::stringstream

1.2)使用 std 的内置函数

1.3)std 内置的数字转字符串函数列表

二、字符串转数字

2.1)使用 std::stringstream

2.2)使用 std 的内置函数

2.3)std 内置的字符串转数字函数列表

2.4)对 std::stringstream 进行包装

三、参考


一、数字转字符串

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


 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐