在把字符串转换成数字的时候我们需要考虑如下问题
1、字符串是不是空串?
2、字符串中是否存在正负号问题
3、转换成整数之后是否会发生溢出
int g_val = 0;
long long StrToIntCode(const char *str, bool flag);
int StrToInt(const char *str)
{
g_val = 1;
long long num = 0;
if (str != NULL&&*str != '\0')//先判断是不是空串
{
bool flag = false;
if (*str == '+')
{
str++;
}
else if (*str == '-')
{
flag = true;
str++;
}
if (*str != '\0')
{
num = StrToIntCode(str, flag);
}
}
return (int)num;
}
long long StrToIntCode(const char *str, bool flag)
{
long long num = 0;
while (*str != '\0')
{
if (*str >= '0'&&*str <= '9')//这次在转换的过程中还要考虑正负号和溢出问题
{
int status = flag ? -1 : 1;
num = num * 10 + status*(*str - '0');
if (((status == -1) && (num > 0x7FFFFFFF)) || ((status == 1) && (num < 0x8000000)))
{
return 0;
}
str++;
}
else
{
num = 0;
break;
}//处理非法字符串
}
if (*str == '\0')
{
g_val = 0;
}
return num;
}
定义全局变量int g_val是为了区分究竟是为了判断字符串是否异常,如果你想让一个非法字符串能打印出前面不是非法的转换值那么你可以将程序中num = 0;去掉