输入一个字符串,将其转换为整数。比如输入“123”,输出为123.
重点在各种边界条件的处理:负数、有非数字、溢出
#include <iostream>
using namespace std;
bool strToInt(const char *str, int &num)
{
const int max = int((unsigned)~0>> 1);
const int min = -(int) ((unsigned)~0 >>1)-1;
num = 0;
bool isMins = false; //是否为负数
if ( strlen(str) == 0 || str == nullptr)
{//如果输入为空
return false;
}
while (*str != '\0') {
if (*str == '-')
{//判断是否为负数
isMins = true;
str++;
}
if (*str >= '0' && *str <= '9') {
int c = *str - '0'; //当前位的数字
if ((!isMins && (num > max/10 || (num == max/10 && c > max%10))))
{
cout << "溢出" <<endl;
return false;
}
else if (isMins && (num >(unsigned)min/10 || (num == (unsigned)min/10 && c >(unsigned)min%10 )))
{
cout << "溢出" <<endl;
return false;
}
num = num*10 + *str-'0';
str++;
}
else
{
//存在非法字符
cout << "有非法字符" << endl;
return false;
}
}
if (isMins)
{
num = (-1) * num;
}
return true;
}
int main(int argc, const char * argv[]) {
// insert code here...
int num = 0;
if (strToInt("-9977123333333", num))
{
cout << num << endl;
}
return 0;
}