string与数值的转换
C++11
C++11
头文件:#include <string>
数值转string
to_string(val):可以将其他类型转换为string。
string转数值
s:表示整数内容的字符串;
b:表示转换所用的基数,默认为10(表示十进制);
p:是size_t的指针,用来保存s中第一个非数值字符的下标,p默认为0,即函数不返回下标。
stoi(s, p, b):string转int
stol(s, p, b):string转long
stod(s, p, b):string转double
stof(s, p, b):string转float
stold(s, p, b):string转long dluble
stoul(s, p, b), stoll(s, p, b), stoull(s, p, b)等。
void testTypeConvert()
{
//int --> string
int i = 5;
string s = to_string(i);
cout << s << endl;
//double --> string
double d = 3.14;
cout << to_string(d) << endl;
//long --> string
long l = 123234567;
cout << to_string(l) << endl;
//char --> string
char c = 'a';
cout << to_string(c) << endl; //自动转换成int类型的参数
//char --> string
string cStr; cStr += c;
cout << cStr << endl;
s = "123.257";
//string --> int;
cout << stoi(s) << endl;
//string --> long
cout << stol(s) << endl;
//string --> float
cout << stof(s) << endl;
//string --> doubel
cout << stod(s) << endl;
}
C++11之前
atoi(将字符串转换成整型数)
相关函数
atof,atol,atrtod,strtol,strtoul
表头文件
定义函数
int atoi(const char *nptr);
附加说明
atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。
范例
mian()
{
char a[]=”-100”;
char b[]=”456”;
int c;
c=atoi(a)+atoi(b);
printf(c=%d ”,c);
}
执行
c=356
atol(将字符串转换成长整型数)
相关函数
atof,atoi,strtod,strtol,strtoul
表头文件
定义函数
long atol(const char *nptr);
函数说明
atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
返回值
返回转换后的长整型数。
附加说明
atol()与使用strtol(nptr,(char**)NULL,10);结果相同。
范例
main()
{
char a[]=”1000000000”;
char b[]=” 234567890”;
long c;
c=atol(a)+atol(b);
printf(“c=%d ”,c);
}
执行
c=1234567890
gcvt(将浮点型数转换为字符串,取四舍五入)
相关函数
ecvt,fcvt,sprintf
表头文件
定义函数
char *gcvt(double number,size_t ndigits,char *buf);
函数说明
gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。
返回值
返回一字符串指针,此地址即为buf指针。
附加说明
范例
main()
{
double a=123.45;
double b=-1234.56;
char *ptr;
int decpt,sign;
gcvt(a,5,ptr);
printf(“a value=%s ”,ptr);
ptr=gcvt(b,6,ptr);
printf(“b value=%s ”,ptr);
}
执行
a value=123.45
b value=-1234.56
自己写转换方法了,代码如下:
从其它类型转换为string,定义一个模板类的方法。
从string转换为其它类型,定义多个重载函数。
template<class T>
string convertToString(const T val)
{
string s;
std::strstream ss;
ss << val;
ss >> s;
return s;
}
int convertStringToInt(const string &s)
{
int val;
std::strstream ss;
ss << s;
ss >> val;
return val;
}
double convertStringToDouble(const string &s)
{
double val;
std::strstream ss;
ss << s;
ss >> val;
return val;
}
long convertStringToLong(const string &s)
{
long val;
std::strstream ss;
ss << s;
ss >> val;
return val;
}
void testConvert()
{
//convert other type to string
cout << "convert other type to string:" << endl;
string s = convertToString(44.5);
cout << s << endl;
int ii = 125;
cout << convertToString(ii) << endl;
double dd = 3.1415926;
cout << convertToString(dd) << endl;
//convert from string to other type
cout << "convert from string to other type:" << endl;
int i = convertStringToInt("12.5");
cout << i << endl;
double d = convertStringToDouble("12.5");
cout << d << endl;
long l = convertStringToLong("1234567");
cout << l << endl;
}
sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。
如: //把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
IAR 类似问题:
已经添加了<stdlib.h>,但TORNADO下编译出现 undefined reference to `itoa'错误。
解决方法:TORNADO不支持itoa方法,在Tornado 2.0 Online Manuals : Routines中找不到itoa方法。用sprintf代替itoa吧。
关键词:Tornado; undefined reference to `itoa'; VXWORKS;sprintf
KeyWords:Tornado; undefined reference to `itoa'; VXWORKS;sprintf
不涉及编译器时:
一、数值型数据转化成字符型数据
杨涛说数据库还是什么东西在读入数据的时候只能识别字符型数据
然后我就想了想怎么把数值型数据转化成字符型
法一、
根据ASC码:
(1)对于个位数,可以将其值加48然后赋给一个字符型变量;
(2)对于两位数及以上的数,可以将其各位上的数码分解出来然后同(1),这是需要一个数组来放这一系列数据;
法二、
由各类数值型数据之间的转换想到的:
将数值型数据 + '0'即可
如
int a = 9;
char b;
b = a + '0';
其他步骤同法一,单个分解,对于两位数及以上的数同样需要一个数组;
不过以上这两种方法计算量相当大!!
法三、
偶然发现存在这样一个现成的函数itoa,可以非常方便的实现这个功能
函数原型 char *itoa(int value,char *string,int radix)
参数说明 value是要转化的数值,string是转化后的字符串,radix是转换的进制,
函数返回一个指向string的指针,
调用这个函数需要包含 stdlib.h 这个头文件
通用方法(针对非COM数据类型)
用sprintf完成转换
char buffer[200];
char c = '1 ';
int i = 35;
long j = 1000;
float f = 1.7320534f;
sprintf( buffer, "%c ",c);
sprintf( buffer, "%d ",i);
sprintf( buffer, "%d ",j);
sprintf( buffer, "%f ",f);
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。 ]