JZ67 把字符串转换成整数(atoi)

题目来源: 把字符串转换成整数(atoi)_牛客题霸_牛客网

描述

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:

1.若干空格

2.(可选)一个符号字符('+' 或 '-')

3. 数字,字母,符号,空格组成的字符串表达式

4. 若干空格

转换算法如下:
1.去掉无用的前导空格
2.第一个非空字符为+或者-号时,作为该整数的正负号,如果没有符号,默认为正数
3.判断整数的有效部分:
3.1 确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回0
3.2 将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响
3.3  整数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231的整数应该被调整为 −231 ,大于 231 − 1 的整数应该被调整为 231 − 1
4.去掉无用的后导空格

数据范围:

1.0 <=字符串长度<= 100

2.字符串由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成

示例1

输入:"82"

复制返回值:82

我的代码:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    int StrToInt(string s) {
        // write code here
        int index=0,re=0;
        int sz=s.length();
        //去掉无用的前导空格
        while(index<sz){
            if(s[index]==' ')
                index++;
            else break;
        }
        //第一个非空字符为+或者-
        if(index == sz)
            return re;
        
        int sign=1;//1为正,0为负
        if(s[index]=='+'){
            sign=1;
            index++;
        }
        else if(s[index]=='-'){//两个符号不能同时包含
            sign=-1;
            index++;
        }
        //判断整数的有效部分
        while(index<sz){
            //cout<<s[index]<<endl;
            char c=s[index];
            if(c<'0' || c>'9'){//非数字,跳出
                break;
            }else{
                if(re>INT_MAX/10 || (re==INT_MAX/10 && (c - '0') > INT_MAX % 10)) return INT_MAX;
                if(re<INT_MIN/10 || (re==INT_MIN/10 && (c - '0') > -(INT_MIN % 10))) return INT_MIN;
                re = re * 10 + sign*(c-'0');
                cout<<re<<endl;
                index++;
            }
        }
        return re;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值