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

来源:互联网 发布:梦幻西游手游 知乎 编辑:程序博客网 时间:2024/05/17 09:13
剑指offer:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
注意:C++中的string结尾不一定为NULL(/0)

输入描述:

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

输出描述:

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

输入

+2147483647    1a33

输出

2147483647 
class Solution {public:    bool isNotNumber(char input){        if(input < '0' || input > '9')            return true;        else             return false;    }    int StrToInt(string str) {        int len = str.size();        if(!len)            return 0;        if(str[0] != '+' && str[0] != '-' && isNotNumber(str[0]))            return 0;        int result = 0;        int sign = 1;        int i = 0;        if(str[0] == '-'){            sign = -1;            i = 1;        }                if(str[0] == '+')i = 1;        for(; i < len; i++){            if(isNotNumber(str[i]))               return 0;            result = result * 10 + str[i] - '0';        }        return result * sign;            }    };
优化后的代码:
class Solution {public:    bool isNotNumber(char input){        if(input < '0' || input > '9')            return true;        else             return false;    }        int StrToInt(string str) {        int len = str.size();        if(!len)            return 0;        if(str[0] != '+' && str[0] != '-' && isNotNumber(str[0]))            return 0;        int result = 0;        int sign = 1;        int i = 0;        if(str[0] == '-'){            sign = -1;            i = 1;        }        if(str[0] == '+')i = 1;        for(; i < len; i++){            if(isNotNumber(str[i]))               return 0;             result = (result << 1) + (result << 3) + (str[i] & 0x0f);//相当于下面一行代码                 //用左移代替乘法,利用数字ASCII码的性质,避免了减法。            //result = result * 10 + str[i] - '0';        }        return result * sign;            }    };


阅读全文
0 0
原创粉丝点击