目录
一、题目
二、易错点+代码
一、题目
把字符串转换成整数(atoi)_牛客题霸_牛客网 (nowcoder.com)
二、易错点+代码
int类型运算可能出现溢出的现象,因此可采用将int类型数据的运算转换成long long类型
class Solution {
public:
int is(long long result)//用于将long long 类型转化成int类型
{
if (result > INT_MAX)
return INT_MAX;
else if (result < INT_MIN)
return INT_MIN;
else
return (int)(result);
}
long long isAdd(long long a, long long b)
{
long long result = a + b;
return result;
}
void Pick_up(string str, vector<int>& num, int& k, int& mark)
{
if (str[0] != '+' && str[0] != '-') //第一个符号不是+和-
{
for (int i = 0; i < str.size(); i++) {
if (str[i] - '0' >= 0 && str[i] - '0' <= 9)
num[k++] = str[i] - '0';
else
break;
}
}
else if (str[0] == '+' || str[0] == '-') //第一符号是+或者-
{
if (str[0] == '-')
{
mark = -1;
}
for (int i = 1; i < str.size(); i++) {
if (str[i] - '0' >= 0 && str[i] - '0' <= 9)
num[k++] = str[i] - '0';
else
break;
}
}
}
int StrToInt(string str)
{
int n = str.size();
if (n == 0)
return 0;
int p = 0;
while (p < n) //先把空格除掉
{
if (str[p] == ' ')
p++;
else
break;
}
str = string(str, p, n - p);
vector<int>num(str.size(), 0);
int k = 0;//记录有多少位数字
int mark = 1;//标识正负
Pick_up(str, num, k, mark);
long long sum = 0;
int j = 0;
while (--k > -1) {
sum = isAdd(sum, mark * num[k] * (long long)pow(10, j));
if (sum > INT_MAX)//判断是否溢出,溢出的话提前结束
return INT_MAX;
else if (sum < INT_MIN)
return INT_MIN;
else
j++;
}
sum = is(sum);//long long类型的转换成int类型
return sum;
}
};