您的位置:首页 > 其它

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

2017-08-11 12:12 603 查看
剑指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;

}

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