题目:
输入整数的字符串,输出相应的整数
解法要点:
1. 判断字符串整数的正负号
2. 如遇到整数字符串中有别的符号,则输出0
3. 输入的字符串可能大于int类型的范围,考虑正溢出和负溢出
4. 在字符串中单个字符变为整数则要减去'0'
5. 判断输入的字符串指针的有效性
注意:csdn上关于该题没有判断负溢出的情况
代码如下:
int print_int(const char* p)
{
if (p == NULL)
return 0;
const char *dig = p;
bool mius(false);
if (*dig == '+')
++dig;
else if (*dig == '-')
{
++dig;
mius = true;
}
long long int j = 0;
while (*dig != '\0')
{
if ((*dig >= '0') && (*dig <= '9'))
{
j = j*10 + *dig - '0';
if (!mius && (j > std::numeric_limits<int>::max())) //判断是否正溢出
return 0;
if (mius && ((0-j) < std::numeric_limits<int>::min())) //判断是否负溢出
return 0;
}
else
return 0;
++dig;
}
if (mius)
{
if (j == (std::numeric_limits<int>::max() + 1))
return std::numeric_limits<int>::min();
else
return 0-static_cast<int>(j);
}
else
return static_cast<int>(j);
}