代码写的啰嗦,但思路清晰。。LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案
class Solution { //题目没有考虑到溢出的情况,不是很完美呀~但在牛客网上也能AC了~
public:
int StrToInt(string str) { //1.去掉首尾空格;2.首字符只能是+、-或数字(若是其他字符,return 0;),并用sign标记;3.若首位非正负号,则全部字符应在‘0’-‘9’之间
if (str.size() == 0) //字符串为空
return 0;
string str_copy = str.substr(str.find_first_not_of(' ')); //删掉头部空格
str_copy = str_copy.erase(str.find_last_not_of(' ') + 1); //删掉尾部空格
int sign = 1;
if (str_copy[0] == '-') {
sign = -1;
str_copy = str_copy.erase(0, 1);//删掉符号字符
if (str_copy.size() == 0)
return 0;
} else if(str_copy[0] == '+') {
sign = 1;
str_copy = str_copy.erase(0, 1);//删掉符号字符
if(str_copy.size() == 0)
return 0;
} else if(str_copy[0] < '0' || str_copy[0] > '9') { //其它非正负号及数字的字符,return 0;
return 0;
}
//到这一步为止得到的字符串是去掉首位空格及符号位的字符串,若该字符串中含有非数字字符,则return 0;
//否则转化为数字*sign 返回该值。溢出的情况怎么办,题目没说明。。。
for (int i = 0; i < str_copy.size(); i++) {
if(str_copy[i] < '0' || str_copy[i] > '9')
return 0;
}
return sign * my_strtoint(str_copy);
}
int my_strtoint(string str) {
int result = 0, base = 1, len_str = 0;
while(str != "") {
len_str = str.size();
result += (str[len_str-1] - '0') * base;
base *= 10;
str.erase(len_str - 1);
}
return result;
}
};