解释:
实现类似atoi的函数,有以下要求。
1、丢弃字符串前面后面的空格。
2、有“正负号”,若一个字符中包含多个正负号,则返回0;
3、字符串可以包含0~9之外的字符,但是转换时只取非数字之前的字符,如“ww22”返回0,“-0022qwq22”返回-22。
4、若数值超出int的范围,返回INT_MAX或者INT_MIN。
class Solution {
public:
int myAtoi(string str) {
//判断是否是空串
if (str.length() == 0)
return 0;
//删除字符串左边和右边的空格
trim(str);
//判断正负号
bool positive = true;
int i = 0;
if(str.at(0) == '+')
i++;
else if(str.at(0) == '-')
{
positive = false;
i++;
}
double tmp = 0;
for(; i < str.length();i++){
int digit = str.at(i) - '0';
if(digit < 0 ||digit > 9)
break;
if(positive)
{
tmp = 10*tmp+digit;
if( tmp > INT_MAX)
return INT_MAX;
}
else{
tmp = 10*tmp - digit;
if(tmp < INT_MIN)
tmp = INT_MIN;
}
}
int ret = (int)tmp;
return ret;
}
std::string& trim(std::string &s)
{
if (s.empty())
{
return s;
}
s.erase(0,s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ") + 1);
return s;
}
};