c/c++字符串转数字的库函数

一.C库函数:

头文件:

        #include<stdlib.h>或#include<cstdlib>

1.1 char*转int/long:

        long int strtol(const char *nptr, char **endptr, int base)

        该函数将从nptr开始,跳过空格,找到'+','-'或者数字开始转换,直到找到第一个不合法字符为止。将这些数转化为long。如果nptr指向的字符串是非法字符串那么将无法转换。字符串可以没有'+','-'符号。        

        第一个参数为需要转long的字符串,第二个参数一般设为NULL,不为空则endptr将得到第一个非法字符的地址。第三个参数表示进制,支持2-36进制。

        非法字符判定与进制有关。如为2进制则合法字符为'0'-'1',十进制则为'0'-'9',十六进制为'0'-'9','a'-'f','A'-'F'。10+进制的字符串不区分大小写,即'a'与'A‘均合法。

        不同的编译器long和int长度有区别。因此得到int值时有时需要考虑是否把返回的long结果转换。

        例:

int a(0);
long b(0);
char str1[]="12345";
char str2[]="2A";
char str3[]="123 126";

//第二个参数为空的情况
a=(int)strtol(str1, NULL, 10);//a=12345
b=strtol(str2,NULL,16);//b=42

//第二个参数不为空,则我们可以如下使用
char* p=str3;
a=(int)strtol(p, (char**)&p, 10);//此时p指向str[3],值为空格。a=123

b=strtol(p,(char**)&p,10);//自动跳过空格。b=126
//这样可以得到两个数。如果字符串里面数字过多可以加循环

 1.2 char*转float/double:

        char*转float:

                float strtol(const char *nptr, char **endptr);

        char*转double:

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

        与1.1相比,这两个函数只支持10进制。其它与1.1基本相同,用法相似。

        例:

       

float a(0);
double b(0);
char str1[]="123.45";
char str2[]="123.12 126.21";

//第二个参数为空的情况
a=strtof(str1, NULL);//a=123.45
b=strtod(str2,NULL);//b=123.45

//第二个参数不为空,则我们可以如下使用
char* p=str3;
a=strtof(p, (char**)&p);//a=123.12

b=strtod(p,(char**)&p);//b=126.21

1.3 其它转换:

        标准库支持char*转long long,long double等。也有相应函数,用法与这些相似。

        转化为long long为strtoll,转化为long double为strtold。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值