C和C++中的数字与字符串的转换

用过java的人都知道,java众多的方法能够非常方便的进行数字和字符串之间的转换,而C和C++就麻烦多了。

其实不然,C和

C++也是提供了方便的方法进行转换,不必手写。

 

1.字符串格式化函数:sscanf和sprintf(stdio.h)

函数原型:

int sscanf( const char *, const char *, ...);

int sscanf(const char *buffer,const char *format,[argument ]...);

buffer 存储的数据

format 格式控制字符串

argument 选择性设定字符串

sscanf会从buffer里读进数据,依照argument的设定将数据写回。

成功则返回参数数目,失败则返回0,错误原因存于errno中。

其实sscanf和scanf基本一样,只不过scanf是从输入流读取数据,sscanf从字符数组buffer读取数据,而格式控制字符串format与scanf基本一样,同样可以使用扫描集进行读取操作。format的具体说明可以参考我的博文:http://www.cnblogs.com/ay27/archive/2012/11/15/2771425.html

 

函数原型:

int sprintf( char *buffer, const char *format, [ argument] … );

buffer 存储的数据

format 格式控制字符串

argument 选择性设定字符串

sprintf会从argument中读取数据,按照format格式写入到buffer中。

最后sprintf返回字符串的长度,相当于一次strlen的调用。

至于format也是与printf基本一样。

 

有这两个函数基本上可以解决多数的字符串和数字转换的问题了,不过这两个函数有时会发生一些很奇怪的问题。这时我们可以用库里边的转换函数。

2.字符串转数字(atoi,atol,atof)(stdlib.h)

函数原型:

int atoi(const char *nptr);

long atol(const char *nptr);

double atof(const char *nptr);

从函数的返回值可以看出它们对应的数据类型了,这个转换非常好用,基本上不会怎么出现莫名其妙的错误,当然nptr数组要设置好了的情况下。

至于strtol,strtoul,strtod等的函数是上面几个的增强版,主要能够处理多种进制方式的数据,只给出函数原型,具体不多说。

函数原型:

long strtol(const char *nptr, char **endptr, int base);  //nptr存储的数据,endptr存储非法数据(若为NULL则不返回非法数据),base是进制方式(从2到36,比如16就是采取16进制方式存储)

double strtod(const char *nptr,char **endptr);

unsigned long strtoul(const char *nptr,char **endptr,int base);

3.C++风格的stringstream(字符串流)(sstream)

double xx = 23.5;
stringstream s;
s<<xx;   //将xx转换成字符串流s
cout<<s.str()<<endl;   //将字符串流输出
double yy;
s>>yy;    //将字符串流转换成数字
cout<<yy<<endl;

这样还用什么可说的呢?

posted @ 2013-02-23 19:58  ay27  阅读(324)  评论(0编辑  收藏  举报