小白今天在编写代码的时候,碰到一个问题:需要将字符串“ 1234 ” 转化为数值1234,再加上312,小白因为是小菜鸟,自己先拙劣了写了一个转化的函数,bug多的改不过来,网上一搜,吼吼,踩在巨人的肩膀上,果然收获颇丰。
情况一:字符串转为化为数值
法1:C++中的stringstream
#include <sstream> //这个必须在预定义时将sstream给include一下
using namespace std;
char a[ 5 ]= "1234"
int num;
sstream( a );
ss>>num;
cout<< num<<“ ”<<num+1<<endl; //输出结果1234 12345
ps:此方法简单,但是若是转化大量的字符串为数值,效率较低
法2:c中的sscanf
# include<stdio.h>
char a[]="123";
int i;
float f;
sscanf (a,"%d",&i); //将a中的字符转化为int型数值
sscanf (a,"%f",&f); //将a中的字符转化为float型数值
printf ("Integer is: %d ",i+1); // 输出:Integer is:124
printf ("float is: %f ",f+1); // 输出:float is:124.000000
法3:c标准库的atoi(转化为int型),atof(转化为float型),atoll(转化为long long型)
# include<stdio.h>
char a[]="123";
int i;
float f;
i=atoi(a);
f=atof(a);
printf ("Integer is: %d ",i+1); // 输出:Integer is:124
printf ("float is: %f ",f+1); // 输出:float is:124.000000
若为c++中的string类型,则需要调用c_str()方法来获取字符串的指针:
# include<stdio.h>
#include<string>
using namespace std; //小白一开始因为少了这一句话,定位了1个半小时,现在它就是我的心头痣!
string a="123";
int i;
float f;
i=atoi(a.c_str());
f=atof(a.c_str());
printf ("Integer is: %d ",i+1); // 输出:Integer is:124
printf ("float is: %f ",f+1); // 输出:float is:124.000000
情况二:数值转化为字符串
方法1:C++中的stringstream
#include<iostream>
#include<string>
using namespace std; //头部预定义
string b="bai";
double i=756;
stringstream ss;
ss << i ;
b=b+ss.str(); //输出:bai756
方法2:C库函数sprintf
#include<iostream>
using namespace std;
int i=756;
char a[10];
sprintf ( a, " %d", i);
strcat ( a, " bai " );
for( int j=0; a[ j ] != ' \ 0 ' ; j ++) //输出:756bai
cout<<a [ j ] ;
总结:
1. 上文中的所有代码例子都只写了预定义和关键语句,不是完整的,加上main函数就可以进行调试了,尤其不能忘了using namespace std;
2. sstream中的ss >> 和 ss <<,以及c中的库函数 sprintf 和 sscanf 的相互对照记忆与使用