您的位置:首页 > Web前端

【剑指offer-解题系列(50)】把字符串转换成整数

2017-06-08 16:57 447 查看



题目描述

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

输入描述:

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




分析

1、首先需要分析是否有不准确字符出现:

如果有,则返回0;

2、正负数,用一个变量sign记录下符号,如果没有则sign为1

后采用逐个字符计算的方法。由于不知道确切数字大小,采用long long型进行记录。

代码实现

    bool isNum(char c){

        if( c<=57&&c>=48 ){

            return true;

        }

        else{

            return false;

        }

    }

    

    int StrToInt(string str) {

        int n = str.size();

        if(n<=0)return 0;

        for(int i =0;i<n;i++){

            if( !isNum(str[i])&& str[i]!='+' && str[i]!='-' &&  str[i]!=' '){

                return 0;

            }

            if( i>=1 && !isNum(str[i]) && isNum(str[i-1]) )

                return 0;

        }

        /////////////////////////

        int sign = 1;

        int ind = 0;

        long long int res=0;

        while(!isNum(str[ind])){

            if(str[ind]=='-' )sign*=-1;

            if(str[ind]=='+' )sign*=1;

            ind++;

        }

        long long units = 1;

        int start = ind;

        while( isNum(str[ind])  && ind<n){

             units*=10;

             ind++;

        }

        while( start<ind  ){

             units/=10;

             res+= units*(str[start]-48);

             start++;

        }

        res*=sign;

        if(res>INT_MAX||res<INT_MIN)

            return 0;

        else

            return res;

    } 
//空格的ASCII码值为32;数字0到9的ASCII码值分别为48-57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。

分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: