直接上代码
数值转字符串
1.方法一
首先推荐用用C++的stringstream。
#include<sstream>
主要原因是操作简单。
数字转字符串,int float等类型 同理。
我已经把这个写成了函数模板,应该可以直接用(vs2017编译执行没问题。)
//数字->string
#include <string>
#include<iostream>
#include <sstream>
using namespace std;
template<class T>
void num_to_str(T t, string& str)
{
//str是待赋值的字符串
stringstream ss;
ss << t;
ss >> str;//or str = 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
//实例:
//string->数字
#include <string>
#include<iostream>
#include <sstream>
using namespace std;
template<class T>
void str_to_num(T& t, string str)
{
//t是待赋值的数字
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;
//out:
//int_=12377777
//double_=12377777.456
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;
}
//附加:上面几个函数建议这样记忆:
//拆开来记忆:stoi->string to int
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
//关于base的举例
#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;
}
//输出 60c0c0(16) = 6340800(10) -1101110100110100100000(2) = -3624224(10) 0x6fffff(0自己识别) = 7340031 (10)
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)和数值转换