字符串转数字:
注意:1.越界
2.正负
3.字符串为NULL:str == NULL
4.字符串为空串: str == ""
5.字符串为0: str == "0"
6.字符串只有符号位: str == "+" 或者 str == "-"
其中 3,4,5,6的返回值为0但是要区分原因; 3,4,6属于输入异常 5 属于正常
代码思路:
StrToIntCore()
{
之前正负已经得到;
对数进行转换(转换时带上正负号):注意越界
转换完后,为了防止 "123$%a" 在进行判断
有结果则返回结果,否则返回0
}
StrToInt()
{
if(str==NULL||str=='\0') //注意的3,5
return 0;
得到正负号(有的话),str++,如果str!='\0',排除了注意的4,6
全部排除了,然后解决问题:StrToIntCore
}
代码实现:
int StrToIntCore(const char* digit, int flag)
{
long long num = 0;
while (*digit >= '0' && *digit <= '9')
{
num = num * 10 + ((*digit) - '0')*flag; //(*digit-'0')*flag 值
if (flag == 1 && num > 0x7fffffff) //超过整型的最大正数表示
{
num = 0; //返回0
break;
}
else if (flag == -1 && num < (signed int)0x80000000) //超过整型的最小负数表示
{
num = 0; //返回0
break;
}
digit++;
}
if (*digit != '\0') //数字部分转化完后,后续还有字符,例如: "123$%a"
num = 0;
return (int)num; //如果第一个字符不是数字,则就是异常的输入
}
int StrToInt(const char* str)
{
long long num = 0;
//str==NULL 的异常
if (str != NULL && *str != '\0')
{
int flag = 1;
if (*str == '+') //有符号的情况,去除符号位,专注做下面的数值转换
str++;
else if (*str == '-')
{
flag = -1;
str++;
}
if (*str != '\0')
num = StrToIntCore(str,flag);
}
return num;
}