lintcode链接地址:http://www.lintcode.com/zh-cn/problem/string-to-integer-ii/
转换字符串到整数
实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。
您在真实的面试中是否遇到过这个题? Yes
样例
“10” =>10
“-1” => -1
“123123123123123” => 2147483647
“1.0” => 1
标签
相关题目
这道题目在lintcode上属于困难题目,个人认为思想比较简单,只是有很多细节问题需要考虑。
①要去除字符串前后的空格
②去除空格后考虑第一个字符是’+’,’-‘,作一个sign的标记。
③字符串遍历时候遇到非法字符就停止,返回非法字符前的整数。
④和INT_MAX(MIN)比较时,注意变量的数据类型,要声明成long long或者double类型。
int atoi(string str){
if(str=="") return 0;
int sign = 1;
int i = 0;
double base = 0;
while(str[i] == ' ') i++;//去除空格
//判断第一个字符是+ -
if(str[i]=='-') {
sign = -1;
i++;
}
if(str[i]=='+') {
sign = 1;
i++;
}
for(;i<str.length();i++){
if(str[i] <'0' || str[i]>'9') break;//非法字符
base = base*10+(str[i]-'0');
if(base*sign > INT_MAX) return INT_MAX;
if(base*sign < INT_MIN) return INT_MIN;
}
return base*sign;
}