一、思路:
首先找到第一个非空元素,分‘+’‘-’‘数字’三种情况考虑,依次将每一位字符转换成数字即可。
二、代码(C++):
int myAtoi(string str) {
int fir = 0; //记录第一个非空元素位置
int res = 0; //保存结果
int j = 0;
for (int i = 0; i != str.size(); i++) //查找第一个非空元素
{
if (str[i] != ' ')
{
fir = i;
break;
}
}
if (str[fir] == '+') //第一个元素为‘+’的情况
{
for (j = fir + 1; j != str.size(); j++)
{
if (str[j] >= '0'&&str[j] <= '9')
{
if (res > INT_MAX / 10 || ((res == INT_MAX / 10) && (str[j] > '7'))) //越界返回INT_MAX
return INT_MAX;
res *= 10;
int a = str[j] - '0';
res += a;
}
else //出现其他字符则返回
return res;
}
if (j == str.size()) //到达字符串末尾则返回
return res;
}
if (str[fir] == '-') //第一个元素为‘-’的情况
{
for (j = fir + 1; j != str.size(); j++)
{
if (str[j] >= '0'&&str[j] <= '9')
{
if (res < INT_MIN / 10 || ((res == INT_MIN / 10) && (str[j] > '8')))
return INT_MIN;
res *= 10;
int a = str[j] - '0';
res -= a;
}
else
return res;
}
if (j == str.size())
return res;
}
if (str[fir] >= '0'&&str[fir] <= '9') //第一个元素为‘数字’的情况
{
for (j = fir; j != str.size(); j++)
{
if (str[j] >= '0'&&str[j] <= '9')
{
if ((res > INT_MAX / 10)||((res==INT_MAX/10)&&(str[j]>'7')))
return INT_MAX;
res *= 10;
int a = str[j] - '0';
res += a;
}
else
return res;
}
if (j == str.size())
return res;
}
return 0;
}