C++ 数值与 string 的相互转换

C++ 数值与 string 的相互转换使用函数模板将基本数据类型(整型、字符型、实型、布尔型)转换成string。//ostringstream对象用来进行格式化的输出,常用于将各种类型转换为string类型//ostringstream只支持<<操作符template<typenameT>stringtoString(constT&t){ostringstreamoss;//创建一个格式化输出流

大家好,又见面了,我是你们的朋友全栈君。

1.数值转 string

1.1 函数模板 + ostringstream

使用函数模板将基本数值类型(布尔型、字符型、整型、实型)转成 string。

//ostringstream对象用来进行格式化的输出,常用于将各种类型转换为string类型
//ostringstream只支持<<操作符
template<typename T> string toString(const T& t) { 
   
	ostringstream oss;  	//创建一个格式化输出流
	oss<<t;				//把值传递到流中
	return oss.str();	
}

cout<<toString(14.2)<<endl;  //实型->string:输出14.2
cout<<toString(12301)<<endl; //整型->string:输出12301
cout<<toString(123456789785)<<endl;//长整型->string:输出123456789785
cout<<toString(true)<<endl;  //布尔型->string:输出1

1.2 标准库函数 std::to_string()

C++11 开始,std 名字空间下引入标准库函数 std::to_string(),可用于将数值转换为string。使用时需要 include 头文件<string>

函数原型申明如下:

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

2.string 转数值

2.1 函数模板 + istringstream

stringstream 在 int 或 float 类型转换为 string 类型的方法中已经介绍过, 这里也能用作将 string 类型转换为常用的数值类型。

#include <iostream> 
#include <sstream> //使用stringstream需要引入这个头文件 
using namespace std;

//模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性) 
template <class Type> Type stringToNum(const string& str) { 
   
    istringstream iss(str);
    Type num;
    iss >> num;
    return num;
}

int main(int argc, char* argv[]) { 
     
    string str("00801");  
    cout << stringToNum<int>(str) << endl;
    return 0;  
}  

2.2 C 标准库函数

具体做法是先将 string 转换为 char* 字符串,再通过相应的类型转换函数转换为想要的数值类型。需要包含标准库函数<stdlib.h>
(1)string 转换为 int32_t

string love = "77";
int ilove = atoi(love.c_str());

//或者16位平台转换为long int
int ilove = strtol(love.c_str(),NULL,10);

(2)string 转换为 uint32_t

// str:待转换字符串
// endptr:指向str中数字后第一个非数字字符
// base:转换基数(进制),范围从2至36
unsigned long int strtoul (const char* str, char** endptr, int base);

// 示例
string love="77";
unsigned long ul;
ul = strtoul(love.c_str(), NULL, 10);

(3)string 转换为 int64_t

string love = "77";
long long llLove=atoll(love.c_str());

(4)string 转换为 uint64_t

unsigned long long int strtoull (const char* str, char** endptr, int base);

// 示例
string love="77";
unsigned long long ull;
ull = strtoull (love.c_str(), NULL, 0);

(5)string 转换为 float 或 double

string love = "77.77";
float fLove = atof(love.c_str());
double dLove = atof(love.c_str());

(6)string 转换为 long double

long double strtold(const char* str, char** endptr);

2.3 C++ 标准库函数

使用 C++11 引入的 C++ 库函数将 string 转换为数值类型,相应的库函数申明于头文件<string>中。

名称 原型 说明
stoi int stoi (const string& str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to integer (function template )
stol long stol (const string& str, size_t* idx = 0, int base = 10);
long stol (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to long int (function template)
stoul unsigned long stoul (const string& str, size_t* idx = 0, int base = 10);
unsigned long stoul (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to unsigned integer (function template)
stoll long long stoll (const string& str, size_t* idx = 0, int base = 10);
long long stoll (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to long long (function template)
stoull unsigned long long stoull (const string& str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to unsigned long long (function template)
stof float stof (const string& str, size_t* idx = 0);
float stof (const wstring& str, size_t* idx = 0);
Convert string to float (function template )
stod double stod (const string& str, size_t* idx = 0);
double stod (const wstring& str, size_t* idx = 0);
Convert string to double (function template )
stold long double stold (const string& str, size_t* idx = 0);
long double stold (const wstring& str, size_t* idx = 0);
Convert string to long double (function template)

形参说明:
str:重载了 string 和 wstring 版本,表示被转换的字符串。

idx:表示一个size_t*的指针类型,默认为空值。不为空时,转换成功时获取第一个非数值字符相对于首字符的偏移下标,也表示成功转换的字符数量,如 “10” 成功转为数值 10 时,*idx的值为 2。

base:表示数值的基数,默认是 10 进制。


参考文献

[1] C++ Reference
[2] strtoul.C++ Reference
[3] strtoull.C++ Reference
[4] strtold.C++ Reference

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146610.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA/request.getParameterValues

    JAVA/request.getParameterValues1比较request.getParameterValues与request.getParameterrequest.getParameterValues(Stringname)是获得如checkbox类(名字相同,但值有多个)的数据。request.getParameter(Stringname)是获得对应名字的值,如果有重复的名,则返回第一个值。例如:reque

    2022年7月22日
    12
  • a4988 脉宽要求_A4988步进电机驱动模块谁用过?

    a4988 脉宽要求_A4988步进电机驱动模块谁用过?A4988是一款完全的微步电动机驱动器,带有内置转换器,易于操作。该产品可在全、半、1/4、1/8及1/16步进模式时操作双极步进电动机,输出驱动性能可达35V及±2A。A4988包括一个固定关断时间电流稳压器,该稳压器可在慢或混合衰减模式下工作。转换器是A4988易于实施的关键。只要在“步进”输入中输入一个脉冲,即可驱动电动机产生微步。无须进行相位顺序表、高频率控制行或复…

    2022年6月17日
    27
  • SPSS 实现KMO和Bartlett的球形度检验[通俗易懂]

    SPSS 实现KMO和Bartlett的球形度检验[通俗易懂]第一步:选择“因子分析”导入数据后,按顺序选择就好:“分析”-“降维”-“因子”第二步:选择变量如果只有一个变量,选中之后,再点击一下中间向右边的那个箭头多个变量的话,比如,我这里选择x1-x8,就是选择x1变量后,按住shift键不放,再点击x8变量,就可以一下子选择8个变量。第三步:选择KMO和巴特利特球形度检验这里,先不要急着点“确定”,先选择“描述”,接着在“相关性矩阵”那里勾选“KMO和巴特利特球形度检验”输出结果KMO统计量值大于0.5,可以看出变量间的相关程度无太

    2022年6月15日
    98
  • pytest之fixture使用详解

    pytest之fixture使用详解简介:fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。2.按模块化的方

    2022年7月1日
    21
  • 【直观详解】什么是正则化

    【直观详解】什么是正则化转自:https://charlesliuyx.github.io/2017/10/03/%E3%80%90%E7%9B%B4%E8%A7%82%E8%AF%A6%E8%A7%A3%E3%80%91%E4%BB%80%E4%B9%88%E6%98%AF%E6%AD%A3%E5%88%99%E5%8C%96/https://www.zhihu.com/question/20924039【内容简介】主…

    2022年7月13日
    17
  • 向量的内积和外积「建议收藏」

    向量的内积和外积「建议收藏」本文参考:https://www.cnblogs.com/gxcdream/p/7597865.html 一、向量的内积 1.1向量内积的定义 概括地说,向量的内积(点乘/点积/数量积)就是对两个向量执行点乘运算,即对这两个向量对应位一一相乘之后求和的操作,如下所示,对于向量a和向量b:…

    2022年9月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号