LeetCode 8. 字符串转换整数 (atoi)--三种方法,分别是流、还有空符数的两种写法
原题链接
中等
作者:
bruce
,
2020-12-26 20:01:07
,
所有人可见
,
阅读 324
class Solution
{
public:
// 第一种流函数,这个不怎么用
int strTonum(string a)
{
int res;
stringstream stream;
stream << a;
stream >> res;
return res;
}
// 第二种方法
int myAtoi(string str)
{
long res = 0;
int k = 0;
int n = str.size();
// 排出空格
while (k < n && str[k] == ' ')
k++;
// 空格之后直接结束的话返回0
if (k == n)
return 0;
// 判断数据的符号是什么
int minus = 1;
if (str[k] == '+' || str[k] == '-')
minus = (str[k++] == '-') ? -1 : 1;
// 判断数字部分
while (k < n && str[k] >= '0' && str[k] <= '9')
{
// 直接得出当前的数字,然后越界就对其进行相应的处理
res = res * 10 + str[k] - '0';
if (minus * res > INT_MAX)
return INT_MAX;
if (minus * res < INT_MIN)
return INT_MIN;
k++;
}
return res * minus;
}
// 第三种,数字是整型,就按照整型来
int myAtoi(string str)
{
int res = 0;
int k = 0;
while (k < str.size() && str[k] == ' ')
k++;
if (k == str.size())
return 0;
int minus = 1;
if (str[k] == '-' || str[k] == '+')
minus = (str[k++] == '-') ? -1 : 1;
// 判断数字部分
while (k < str.size() && str[k] >= '0' && str[k] <= '9')
{
// 不管符号,直接判断是否越界,int最大的数字是2147483647, 所以只要大于7肯定越界
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (str[k] - '0') > 7))
{
return (minus == -1) ? INT_MIN : INT_MAX;
}
res = res * 10 + (str[k++] - '0');
}
return res * minus;
}
};