C++.【转】C++数值类型与string的相互转换

1、C++数值类型与string的相互转换 - JohnGu - 博客园.html(https://www.cnblogs.com/johngu/p/7878029.html

2、

1.数值类型转换为string

1.1使用函数模板+ostringstream

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


1

2

3

4

5

6

7

8

9

10

11

12

//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()

std命令空间下有一个C++标准库函数std::to_string(),可用于将数值类型转换为string。使用时需要include头文件<string>

函数原型申明如下:


1

2

3

4

5

6

7

8

9

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类型转换为常用的数值类型。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#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; 

    system("pause"); 

    return 0; 

  

2.2使用C标准库函数

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


1

2

3

4

5

string love="77";

int ilove=atoi(love.c_str());

//或者16位平台转换为long int

int ilove=strtol(love.c_str(),NULL,10);

  (2)string转换为uint32_t


1

2

3

4

5

6

7

8

9

//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转换为uint64_t


1

2

string love="77";

long long llLove=atoll(love.c_str());

  (4)string转换为uint64_t


1

2

3

4

5

6

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


1

2

3

string love="77.77";

float fLove=atof(love.c_str());

double dLove=atof(love.c_str());

  (6)string转换为long double


1

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*的指针类型,默认为空值。不为空时,转换成功时获取第一个非数值字符的下标。一般情况下,因为它是直接char型指针把最后非数值字符的地址值和起始地址值相减,所以也表示成功转换的字符数量,如”10”转成功为数值10时,*idx的值为2。

base:表示转换基准,默认是10进制。


参考文献

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

3、

4、

5、

原文地址:https://www.cnblogs.com/cppskill/p/9105377.html

时间: 2024-11-09 10:51:56

C++.【转】C++数值类型与string的相互转换的相关文章

c++11 数值类型和字符串的相互转换

string和数值类型转换 c++11提供了to_string方法,可以方便的将各种数值类型转换为 字符串类型: std::string to_string(int value); std::string to_string(long int value); std::string to_string(long long int value); std::string to_string(unsigned int value); std::string to_string(unsigned lo

c++ int,double等数字类型与string的相互转换

unsigned long stringToNum(const string& str) //string 到数字 { istringstream iss(str); unsigned long num; iss >> num; return num; } string numToString(unsigned long d) { //数字到string stringstream ss; ss <<std::fixed<< d; return ss.str();

模板函数:将string类型变量转换为常用的数值类型和常用的数值类型转String

template <class Type>Type stringToNum(const string str) {    istringstream iss(str);    Type num;    iss >> num;    return num;}template<typename T> string toString(const T& t) {    ostringstream oss;  //创建一个格式化输出流    oss << t;

数值类型与std::string的相互转换

1.使用std::stringstream: //将in_value值转换成out_type类型 template<class out_type, class in_value> out_type StringTo(const in_value& t) { std::stringstream sstream; sstream << t; //向流中传值 out_type result; //这里存储转换结果 sstream >> result; //向resul

C++中string转化为常用数值类型

//模板类 用于将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; cin >> str; stringToNum<float>(str

数值类型与字节数组之间的相互转换

我们在上文 如何选择使用字符串还是数字呢? 中阐述了使用数值类型的好处,那么问题来了,如何在数值类型与字节数组之间相互转换呢? 我们先看看单个数值类型和字节数组之间的转换,我们以Integer类型为例: public static byte[] intToBytes(int x) {     ByteBuffer intBuffer = ByteBuffer.allocate(Integer.BYTES);     intBuffer.putInt(0, x);     return intBu

C#1(.net和C#的关系、VS与.net的对应关系、VS2012常用的几种应用程序、C#定义一个类的方法、类页面内容的解释、定义Person的类、调用Person类的方法、命名规范、数值类型)

1..net和C#的关系 .net是一个开发平台,C#是应用在.net平台上的一种语言.   2.VS与.net的对应关系  3.VS2012常用的几种应用程序 第一种是Windows窗体应用程序,也即是我们常用的C/S端的应用软件: 第二种是控制台应用程序,主要是用来学习调试C#代码的(老师上课应用的模式): 第三种是空Web应用程序,建立空的网页模式,B/S模式: 第四种是Web 窗体应用程序,建立后会生成一些常用的网页组件和功能,例如JS.image等,也是B/S模式. 4.C#定义一个类

C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)

一.数值类型及其调用原理 名称 说明 所占字节 范围 byte 字节型 1 -27~27-1 short 短整型 2 -215~215-1 int 整型 4 -231~231-1 long 长整型 8 -263~263-1 char 字符型 1 0~65535 float 单精度型 4 ±1.5*10-45~±3.4*1038 double 双精度型 8 ±5.0*10-324~±1.7*10308 bool 布尔型 1 只有true和false两个值 static void Main(stri

字符串转换数值类型异常分析

在这篇文章中,我们来分析一下C#的函数int.Parse(),字符串转换数值类型时候发生的异常. int.Parse(String str): 这种方法是将数字内容的字符串转换为int类型. 如果字符串的内容为Null ,则抛出ArgumentNullException异常: 如果字符串内容不是数字,则抛出FormatException异常. 使用该方法只能处理字符串的内容,而且转换后的字符串内容要在int类型的可表示范围之内. 好,现在来一段测试程序: 这是测试界面 输入int32表示范围内的