C++数值和字符串之间的转换方法(只讨论比较简单的办法)

直接上代码

数值转字符串

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)和数值转换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值