C++string转int的方法

一 点睛

需要用到下面这一组函数。

long int strtol(const char *nptr, char **endptr, int base);                    //将参数nptr字符串根据参数base来转换成有符号的整型
long long int strtoll(const char *nptr, char **endptr, int base);              //将参数nptr字符串根据参数base来转换成有符号的长整型
unsigned long int strtoul(const char *nptr, char **endptr, int base);          //将参数nptr字符串根据参数base来转换成无符号整型
unsigned long long int strtoull(const char *nptr, char **endptr, int base);    //将参数nptr字符串根据参数base来转换成无符号长整型

使用说明

第一个参数 nptr是要转化的字符串。

第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。如果没有合法字符,则 *endptr = nptr,函数返回0.

第三个参数base说明nptr的进制。base 取值范围 0,2-36。

这几个函数会忽略nptr前面的空格( ' ', '\t', '\n' '\f', '\v' '\r' ,由isspace判定为真的字符)。

二 实战

1 代码

#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
int main(){
    char *endptr;
    char nptr[]="123abc";
    int ret = strtol(nptr, &endptr, 10 );
    cout<<"ret:"<<ret<<endl;
    cout<<"endptr:"<<endptr<<endl;

    char *endptr2;
    char nptr2[]=" \n\t    abc";
    ret = strtol(nptr2, &endptr2, 10 );
    cout<<"ret:"<<ret<<endl;
    cout<<"endptr2:"<<endptr2<<endl;

    char *endptr8;
    char nptr8[]="0123";
    ret = strtol(nptr8, &endptr8,0);
    cout<<"ret:"<<ret<<endl;
    cout<<"endptr8:"<<endptr8<<endl;   

    char *endptr16;
    char nptr16[]="0x123";
    ret = strtol(nptr16, &endptr16,0);
    cout<<"ret:"<<ret<<endl;
    cout<<"endptr16:"<<endptr16<<endl;  
    return 0;
}

2 运行

[root@localhost charpter03]# g++ 0307.cpp -o 0307
[root@localhost charpter03]# ./0307
ret:123
endptr:abc
ret:0
endptr2:
        abc
ret:83
endptr8:
ret:291
endptr16:

3 说明

当第3个参数为0时,则分以下3中情况进行处理:

第1种:如果nptr以0x开头,则把nptr当成16进制来处理。

第2种:如果nptr以0开头,则把nptr当成8进制来处理。

第3种:把nptr当成10进制。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值