说真的,这个字符串处理始终是基本功,而字符串和整数之间的转换,可谓屡屡出现,使用频率很高的。最近,经常用到,但是,偶尔也会忘记。所以,在这里,记下来和大家分享一下。
既然是C++,那么讲究的是高效,C++特性的转换。下面是C++的方法:
stringstream 智能类
因为stringstream的构造和析构比较耗费资源,所以经常重复使用一个
注意,下次使用的时候,调用clear()方法清除所有错误标志位
此外,还总结一波儿C语言中会用到的,当然C++也可以使用的方法
代码使用范例如下:
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
//1、strstream
int ns = 12;
stringstream stream;
string strs;
stream << ns;
stream >> strs;
cout << "strs:" << strs << endl;
stream.clear();
int ms = 0;
stream << strs;
stream >> ms;
cout << "ms:" << ms << endl;
//2.std::to_string
cout << std::to_string(ms) << endl;
return 0;
}
stdlib.h cstdlib 引入标准库文件
int atoi(char *nptr)
atoi会扫描参数 nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始转换,
而再遇到非数字或字符串结束时才结束转换,并将结果返回。
long atol(char *nptr)
说明:同atoi
double atof(const char * nptr)
参数nptr 字符串可包含正负号、小数点或E(e)来表示指数部分,例如123.456或123e-2
数字转字符串
long strtol(char *nptr, char **endptr, int base)
参数endptr 如果不为NULL,则会遇到不符合号条件而终止的nptr中的字符指针由endptr返回
参数base代表采用的进制方式,如base值为10,则采用10进制
类似的用法,strtoul 将字符串转换成无符号长整形数
unsigned long strtoul(char * nptr, char ** endptr, int base)
其用法参照strtol函数
char *itoa(int number,char *nptr,int radix)
参数radix是转换进制数,可以为2、8、10、16等
但是请注意,itoa并是一个非标准的C/C++函数,它是Windows持有的,如果要写跨平台的程序,
请用sprintf。
int sprintf (char *nptr, const char *format, ...)
常用的format 有: %d 十进制有符号整数; %u十进制无符号整数
%o 八进制无符号整数; %x或%X 十六进制无符号整数
%f 小数形式输出单、双精度浮点数; %lf 小数形式输出双精度浮点数
%e 或 %E 指数形式输出单、双精度浮点数
%g 或 %G 自动旋转%f或%e输出所占列数较小的一种输出单、双精度浮点数
【附加格式】
字母l 长整型,可加在格式符d、u、o、x之前
字符h 短整形,可加在格式符d、u、o、x之前
正整数m 右对齐,实际长度大于m时,按实际位数输出
负整数m 左对齐,实际长度大于m是,按实际位数输出
小数点(.)+正整数n 输出n位小数,第n+1位四舍五入
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
//1. atoi
char *nptr = "123.99abc123";
int n = atoi(nptr);
cout << "n:" << n << endl;
//2.atol
int m = atol(nptr);
cout << "m:" << m << endl;
//2 strtol
char * endptr;
int _m = strtol(nptr,&(endptr),10);
cout << "_m(strtol):" << _m << endl;
//3.atof
double d = atof(nptr);
cout << "d:" << d << endl;
//4.itoa
char xptr[100];
itoa(m,xptr,4);
cout << xptr << endl;
char yptr[100];
//5.sprintf
sprintf(yptr,"%d%d",n,m);
cout << yptr << endl;
return 0;
}