Leetcode 8. String to Integer (atoi)

来源:互联网 发布:php crm 开源 编辑:程序博客网 时间:2024/06/07 18:57


题意:实现atoi();


思路:题目简单,坑不好趟,改了好久

atoi()规则如下:

1.忽略首空格

2.如果碰见不合法的输入,以最大能匹配的合法输入计算:

比如123abc 会输出 123

234T32 会输出 234

否则返回0

3.支持加号

4.如果上溢出,则输出最大值;如果下溢出,则输出最小值


代码如下:(不建议看,写的太乱了)


int myAtoi(string str) {           // if(str.size() > 11)         //   return 0;                                int i;        long long num=0;        int legalChar[300];        char maxnum[] = "2147483647";                //合法字符        memset(legalChar,0,sizeof(legalChar));     //   legalChar['.'] =1;        legalChar['-'] = 1;        legalChar['+'] = 1;        for(int numb='0';numb<='9';numb++)            legalChar[numb] = 100;                        //过滤首空格        if(str[0] == ' '){            for(i=0;i<str.size();i++){                if(str[i] != ' ')                    break;            }            str.erase(0,i);        }                    //带有的字符是否合法         for(i=0;i<str.size();i++){            if(legalChar[str[i]])                legalChar[str[i]] --;            else{                str.erase(i,str.size()-i);            }        }        if(legalChar['+']==0 && legalChar['-']==0)//+,-只能存在一个            return 0;                //字符位置是否合法        if(legalChar['-']==0 || legalChar['+']==0){//+,-在第一位            if(str[0]!='+' && str[0]!='-')                return 0;        }                //是否会溢出        int flag=0,minus=0;//flag是符号标记,minus是负数标记        if(legalChar['-']==0 || legalChar['+']==0){            flag=1;            if(legalChar['-'] == 0)                minus=1;        }        if(str.size() > 15){//长度不符            if(minus)                return 1<<31;            return ~(1<<31);        } /*               if(str == "-2147483648" )            return -2147483648;        if(str.size() == 10+flag){            for(i=0;i+flag<str.size();i++){                if(str[i+flag] > maxnum[i])                    return 0;                if(str[i+flag] < maxnum[i])                    break;            }        }*/        //得到结果        for(i=0;i+flag<str.size();i++){            num = str[i+flag] - 48 + num *10;        }        if(minus)            num = -num;        if(num < (1<<31))            return (1<<31);                    if(num > (~(1<<31)))            return (~(1<<31));                    return num;            }





0 0
原创粉丝点击