直接上代码
数值转字符串
1.方法一
首先推荐用用C++的stringstream。
#include<sstream>
主要原因是操作简单。
数字转字符串,int float等类型 同理。
我已经把这个写成了函数模板,应该可以直接用(vs2017编译执行没问题。)
#include <string>
#include<iostream>
#include <sstream>
using namespace std
;
template<class T>
void num_to_str(T t
, string
& str
)
{
stringstream ss
;
ss
<< t
;
ss
>> str
;
}
int main()
{
string str_
;
num_to_str(12.43, str_
);
cout
<<"str_="<< str_
<< endl
;
cout
<< "12.43" << endl
;
return 0;
}
2.方法二
string to_string
(int val
);
使用#include
<string
>头文件中的内联函数
to_string(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
);
int main()
{
string str_1
=to_string(123);
cout
<<"str_1="<< str_1
<< endl
;
string str_12
= to_string(12.354);
cout
<< "str_12=" <<str_12
<< endl
;
unsigned int n13
= 12;
cout
<<"to_string(12)="<< to_string(n13
) << endl
;
return 0;
}
字符串转数值
string类型的字符串
1.方法一
使用C
++的stringstream
#include <string>
#include<iostream>
#include <sstream>
using namespace std
;
template<class T>
void str_to_num(T
& t
, string str
)
{
stringstream ss
;
ss
<< str
;
ss
>> t
;
}
int main()
{
string str
= "12377777.456";
double double_
= 0;
int int_
= 0;
str_to_num(double_
, str
);
str_to_num(int_
, str
);
cout
<< "int_=" << int_
<< "\n" << "double_=" << fixed
<<setprecision(3)<<double_
<< endl
;
return 0;
}
2.方法二
函数原型 说明
int stoi(const string
& _Str
, size_t
*_Idx
= 0,int _Base
= 10) 把字符串_Str从_Idx 开始转换成_Base 进制的
int
long stol(const string
& _Str
, size_t
*_Idx
= 0,int _Base
= 10) 把字符串_Str从_Idx 开始转换成_Base 进制的
long
unsigned long stoul(const string
& _Str
, size_t
*_Idx
= 0,int _Base
= 10) 把字符串_Str从_Idx 开始转换成_Base 进制的
unsigned long
long long stoll(const string
& _Str
, size_t
*_Idx
= 0, int _Base
= 10) 把字符串_Str从_Idx 开始转换成_Base 进制的
long long
unsigned long long stoull(const string
& _Str
, size_t
*_Idx
= 0,int _Base
= 10) 把字符串_Str从_Idx 开始转换成_Base 进制的
unsigned long long
float stof(const string
& _Str
, size_t
*_Idx
= 0) 把字符串_Str从_Idx 开始转换成
float
double stod(const string
& _Str
, size_t
*_Idx
= 0) 把字符串_Str从_Idx 开始转换成
double
long double stold(const string
& _Str
, size_t
*_Idx
= 0) 把字符串_Str从_Idx 开始转换成
long double
实例:
#include <iostream>
#include<string>
using namespace std
;
int main()
{
string str
= "123.345";
int i
= stoi(str
);
float f
= stof(str
);
double d
= stod(str
);
cout
<< "i = " << i
<< "\nf = " << f
<<"\nd = "<<d
<< endl
;
string s
="222.22";
cout
<<"s="<<s
<<endl
;
int a
= 222;
int ot
= stoi(s
,0,10);
int ol
= stol(s
,0,10);
float of
= stof(s
,0);
double od
= stod(s
,0);
cout
<<"ot="<<ot
<<endl
;
cout
<<"ol="<<ol
<<endl
;
cout
<<"of="<<of
<<endl
;
cout
<<"od="<<od
<<endl
;
return 0;
}
char数组类型字符串
可以采用库文件<stdlib.h>里的函数
double atof
(char const* _String
) 将字符串_String转换为双精度浮点型值。
int atoi
(char const* _String
) 将字符串_String转换为整型值。
long atol
(char const* _String
) 将字符串_String转换为长整型值。
long long atoll
(char const* _String
) 将字符串_String转换为
long long值。
float strtof
(const char* str
, char** endptr
); 将字符串str转换为单精度浮点型值,到endptr停止
double strtod(
const char * str,
char ** endptr) 将字符串str转换为双精度浮点型值,到endptr停止。
long int strtol
(const char* str
, char** endptr
, int base
) 将字符串str转换为base进制长整值,到endptr停止。
long double strtold
(const char* str
, char** endptr
) 将字符串_String转换为长双精度浮点型值,到endptr停止。
long long int strtoll
(const char* str
, char** endptr
, int base
) 将字符串str转换为base进制长长整值,到endptr停止。
unsigned long int strtoul
(const char* str
, char** endptr
, int base
) 将字符串str转换为base进制无符号长整值,到endptr停止。
unsigned long long int strtoull
(const char* str
, char** endptr
, int base
) 将字符串str转换为base进制无符号长长整值,到endptr停止。
*endptr 为
NULL时,无法获取停止后的下一个字符
*base如果为
0时,将会按照字符串中的格式来转换
#include <iostream>
using namespace std
;
int main()
{
char str
[]= "123.34 5.12";
char* dptr
;
int i
= atoi(str
);
float f
= atof(str
);
double d
= strtod(str
,&dptr
);
double dd
= strtod(dptr
, NULL);
cout
<< "i = " << i
<< "\nf = " << f
<<"\nd = "<<d
<<"\ndd = "<<dd
<<endl
;
system("pause");
return 0;
}
i
= 123
f
= 123.34
d
= 123.34
dd
= 5.12
#include <iostream>
#include<stdlib>
using namespace std
;
int main()
{
char szNumbers
[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd
;
long int li1
, li2
, li3
, li4
;
li1
= strtol(szNumbers
, &pEnd
, 10);
li2
= strtol(pEnd
, &pEnd
, 16);
li3
= strtol(pEnd
, &pEnd
, 2);
li4
= strtol(pEnd
, NULL, 0);
printf("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1
, li2
, li3
, li4
);
system("pause");
return 0;
}
The decimal equivalents are
: 2001, 6340800, -3624224 and 7340031
##代码引用
[C
++中字符串与数值转换(超详细)
](https
://blog
.csdn
.net
/qq_33670157
/article
/details
/104690110?utm_medium
=distribute
.pc_relevant
.none
-task
-blog
-BlogCommendFromMachineLearnPai2
-7.nonecase
&depth_1
-utm_source
=distribute
.pc_relevant
.none
-task
-blog
-BlogCommendFromMachineLearnPai2
-7.nonecase
)
以下是文章部分引用链接,十分感谢!!!!! C++中字符串与数值转换(超详细) C++中的字符串(String)和数值转换