您的位置:首页 > 其它

String to Integer (atoi)

2015-09-07 20:47 295 查看
Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.


这个问题上手是比较容易的,就是把字符串转化成int类型的数字。但在实现期间,确实有很多情况需要考虑。正负号,非数字的字符,空字符等。而且数字字符间也存在可能不连续的现象,在题目中,数字之后如果出现其他字符,就停止遍历了。如果出现“+-”则返回0.最后就是要注意所谓了的溢出问题,INT_MAX和INT_MIN,溢出的话就返回边界值。

class Solution {
public:
int myAtoi(string str) {

if(str.size()==0) return 0;  //空串直接返回零

int i=0;
for(i;i<str.size();i++){    //去掉开头的空字符
if(str[i]!=' ')
break;
}
str=str.substr(i,str.size()-i);
int flag=1;
long long result=0;
if(str[0]=='-'){    //判断正负号
flag=-1;
str=str.substr(1,str.size()-1);
}
else if(str[0]=='+'){
str=str.substr(1,str.size()-1);
}
if(!isdigit(str[0])){    //下一个字符如果还是符号的话返回0
return 0;
}
for(int i=0;i<str.size();i++){    //转化过程
if(isdigit(str[i])){
int t=str[i]-'0';
result=result*10+t;
if(result>INT_MAX){   //如果结果已经超过INT的范围,就可以结束遍历了
break;
}
}
else{    //碰到非数字的字符就不再继续遍历
break;
}
}
cout<<str<<endl;
cout<<result<<endl;
cout<<flag<<endl;
if(flag==1&&result>INT_MAX)
return INT_MAX;
else if(flag==-1&&-result<INT_MIN)
return INT_MIN;
else
return (int)flag*result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string