一、思路:
首先找到第一個非空元素,分‘+’‘-’‘數字’三種情況考慮,依次將每一位字符轉換成數字即可。
二、代碼(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;
}