剑指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; } };