这个题不难,但是细节挺多的,我也调试了两三次才OK
问题拆分:
1.得到有效字符串
1.为了掐头去尾,我设计了一个起始标志跟结束标志。
2.+,-,0-9算有效字符
3.剩下就是一些边界问题
2.把有效字符串转成int
1.设置一个符号位,最后用得上
2.遍历字符串
3.处理边界
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return int整型
*/
int StrToInt(string s) {
// write code here
bool pre = true;
bool end = false;
string res = "";
for(int i=0;i<s.size();i++){
if(s[i] == '+' || s[i] == '-' || (s[i] >= '0' && s[i] <= '9') ){
if(!pre && (s[i] == '+' || s[i] == '-')){
pre = false;
end = true;
break;
}
res += s[i];
pre = false;
}else{
if(s[i] == ' '){
if(pre || end){
continue;
}
}
pre = false;
end = true;
break;
}
}
if(res.size() > 0){
return formatStrToInt(res);
}else{
return 0;
}
}
int formatStrToInt(string s) {
// cout << "s is " << s << endl;
long ret = 0;
int i = 0;
bool isPositive = true;
if(s[0] == '+'){
i++;
}else if(s[0] == '-'){
i++;
isPositive = false;
}
while(i < s.length()){
ret *= 10;
ret += (s[i] - '0');
// printf("ret = %d,s[%d] = %d\n",ret,i,(s[i] - '0'));
if(isPositive && ret > pow(2, 31)-1){
return pow(2,31)-1;
}
if(!isPositive && ret > pow(2, 31)){
return -pow(2,31);
}
i++;
}
return isPositive ? ret : -ret;
}
};



京公网安备 11010502036488号