将字符串转换成为整数,要注意边界问题,比如说要转换的整数超过了最大的整数,还有处理空字符串的情况。
#include <iostream>
#include <string>
using namespace std;
//枚举型的值判断值是否有效
enum {kValid = 0, kInvalid};
int status = kValid;
long long StrToIntCore(char *str, bool minus)
{
long long num = 0;
while (str != NULL && *str != '\0')
{
if (*str >= '0' && *str <= '9')
{
int flag = minus ? 1 : -1;
num = num * 10 + flag * (*str - '0');
//32位有符号整数的最大值0X7FFFFFFF, 最小整数0X80000000
if ((minus && num > 0x7FFFFFFF) || (!minus && num < (signed int)0x80000000))
{
num = 0;
break;
}
++str;
}
else
{
num = 0;
break;
}
}
if (*str == '\0')
{
status = kValid;
}
return num;
}
int StrToInt(char *str)
{
status = kInvalid;
long long num = 0;
if (str != NULL && *str != '\0')
{
//true为正,false为负
bool minus = true;
if (*str == '+')
str++;
if (*str == '-')
{
str++;
minus = false;
}
if (*str != '\0')
{
num = StrToIntCore(str, minus);
}
}
return (int)num;
}
int main()
{
char str[] = "-1";
int num = StrToInt(str);
cout << num;
}