题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
链接:
剑指Offer(第2版):P318
思路标签:
- 边界条件
解答:
- 该题目主要考察的就是边界条件:数据上下溢出、空字符串、只有正负号、有无正负号、错误标志输出
class Solution {
public:
enum Status { kValid = 0, kInvalid };
int g_nStatus = kValid;
int StrToInt(string str) {
g_nStatus = kInvalid;
long long num = 0;
const char* cstr = str.c_str();
if ((cstr != nullptr) && (*cstr != '\0'))
{
int minus = 1;
if (*cstr == '-')
{
minus = -1;
cstr++;
}
else if (*cstr == '+')
cstr++;
while (*cstr != '\0')
{
if (*cstr > '0' && *cstr < '9')
{
g_nStatus = kValid;
num = num * 10 + (*cstr - '0');
cstr++;
if (((minus>0) && (num > 0x7FFFFFFF)) ||
((minus<0) && (num > 0x80000000)))
{
g_nStatus = kInvalid;
num = 0;
break;
}
}
else
{
g_nStatus = kInvalid;
num = 0;
break;
}
}
if (g_nStatus == kValid)
num = num * minus;
}
return (int)num;
}
};
c++相关
string: