这个题不难,但是细节挺多的,我也调试了两三次才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; } };