参考资料:
[1]题目:https://leetcode-cn.com/problems/string-to-integer-atoi/submissions/
[2]编程之法:C++面试和算法心得
注意:
//范围超限的问题
class Solution {
public:
int myAtoi(string str) {
const char* pStr = str.data();
const int INTMAX = 2147483647;
const int INTMIN = -2147483648;
if(pStr == nullptr)
return 0;
while(isspace(*pStr))
pStr++;
bool bFlag = true;
if(*pStr =='+')
{
bFlag = true;
pStr++;
}
else if(*pStr == '-')
{
bFlag = false;
pStr++;
}
int n=0;
while(pStr!=nullptr)
{
if(isdigit(*pStr))
{
int c = *pStr-'0';
//判断n是否超出范围
if((bFlag == true) &&((n>INTMAX/10) || ((n==INTMAX/10) && (c>INTMAX%10))))
{
return INTMAX;
}
else if((bFlag == false) &&((n>(unsigned)INTMIN/10 )|| ((n==(unsigned)INTMIN/10) && (c>(unsigned)INTMIN%10))))
{
return INTMIN;
}
//判断n是否超出范围
n=10*n+c;
}
else
{
break;
}
pStr++;
}
if(bFlag == true)
return n;
else
return -n;
}
};