题目描述:
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则请到力扣网查看:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-to-integer-atoi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我使用暴力解法,代码冗长。
上代码。
int myAtoi(string str)
{
int i = 0;
string temp ;
long long back;
// 过滤空格字符
for (i = 0; i < str.size(); i++)
{
if (str[i] != ' ')
{
break;
}
}
// 如果整个字符串都是空格字符,直接返回0
if (i == str.size())
return 0;
// 判断第一个非空字符是不是在规则范围内
if (str[i] == '0' || str[i] == '1' || str[i] == '2' || str[i] == '3' || str[i] == '4' ||
str[i] == '5' || str[i] == '6' || str[i] == '7' || str[i] == '8' || str[i] == '9' || str[i] == '-' || str[i] == '+')
{
}
else
{
return 0;
}
// 第一个非空字符如果是 - ,则判断下一个字符串是不是数字,如果不是,就返回0
if (str[i] == '-')
{
if (str[i+1] == '0' || str[i+1] == '1' || str[i+1] == '2' || str[i+1] == '3' || str[i+1] == '4' ||
str[i+1] == '5' || str[i+1] == '6' || str[i+1] == '7' || str[i+1] == '8' || str[i+1] == '9')
{
temp += '-';
i++;
}
else
{
return 0;
}
}
// 第一个非空字符如果是 + ,则判断下一个字符串是不是数字,如果不是,就返回0
if (str[i] == '+')
{
if (str[i+1] == '0' || str[i+1] == '1' || str[i+1] == '2' || str[i+1] == '3' || str[i+1] == '4' ||
str[i+1] == '5' || str[i+1] == '6' || str[i+1] == '7' || str[i+1] == '8' || str[i+1] == '9')
i++;
else
{
return 0;
}
}
// 把数字存到临时字符串中
for (i ; i < str.size(); i++)
{
if (str[i] == '0' || str[i] == '1' || str[i] == '2' || str[i] == '3' || str[i] == '4' ||
str[i] == '5' || str[i] == '6' || str[i] == '7' || str[i] == '8' || str[i] == '9')
{
temp += str[i];
}
else
{
break;
}
}
// 如果字符串只有一个 + ,则返回 0 。实际上这条语句没有也可以
if(str.size() == 1 && str[0] == '+')
return 0;
// 用流将 string 转换成 int 类型
stringstream ss;
ss << temp;
ss >> back;
// 检查back是否超过32位整数界线
if(back < INT_MIN )
return INT_MIN;
if(back > INT_MAX )
return INT_MAX;
return back;
}
多次提交尝试均稳定在8ms
官方题解使用自动机,有同学使用正则表达式,还有小机灵鬼用流巧解问题,来看看小机灵鬼的代码:
class Solution {
public:
int myAtoi(string str)
{
int num=0;
istringstream str_1(str);
//while (num==0)
str_1 >> num;
if (num > INT_MAX)
return INT_MAX;
else if (num < INT_MIN)
return INT_MIN;
else
return num;
}
};
// 作者:ron-joan-3
// 链接:https://leetcode-cn.com/problems/string-to-integer-atoi/solution/qiao-yong-shu-ju-liu-bai-tuo-rong-chang-de-bian-ji/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
可以说非常巧妙了。