剑指offer 67 把字符串转换成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:

输入一个字符串,包括数字字母符号,可以为空

输出描述:

如果是合法的数值表达则返回该数字,否则返回0

示例1

输入

复制

+2147483647
    1a33

输出

复制

2147483647
    0

先介绍一下atoi函数:

用来把一个字符串转换成一个整数,例如:输入字符串“123”,输出数字123

思路:
此题最关键是要考虑到很多临界情况:

1、考虑是否是空字符串,空字符串不合法,返回0

2、考虑字符串是否合法,不合法,返回0

3、最大数问题,超过最大值,返回0

4、不合法情况下返回0,要与正常值返回0,作区分

5、只有正负号情况是合法的。

代码:
 

class Solution {
public:
    int flag=true;//判断是正常返回的零,还是因为非法输入返回的零
    int sys=0;//0代表是正数,1代表是负数
    int StrToInt(string str) {
        //语法: const char *c_str();
       // c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 
        //如果不用此函数只能用下标法,不能用str直接str++,或者str--
        const char* digit=str.c_str();
        //考虑字符串是否为空,并做标记
        int n=str.size();
        if(n==0)
        {
         flag=false;
         return 0;
        }
        long long num=0;
        //考虑是否有正负号,并为负号做标记,并考虑只有正负号的输入,返回零(合法输入)
        if(*digit=='+')
          digit++;
        else if(*digit=='-')
        { sys=1;
          digit++;
        }
        //将字符串转化为数字,并检查中间是否有非法字符(不在0~9之间的字符)
        while(*digit!='\0')
        {
            if(*digit>='0'&&*digit<='9')
            {   int minus=(sys==-1)?-1:1;//判断是正值还是负值
                num=num*10+minus*(*digit-'0');//由于需要判断大数问题,必须及时求出正负值
                //判断大数问题(最大的正整数与最小的负整数)
                if(num>0x7FFFFFFF||num<(signed int)0x80000000)
                { 
                   num=0;
                   break;
                }
                digit++;
            }
            else
            {
                flag=false;
               return 0;
            }
        }
       return num;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值