#include<stdio.h>
#include<string.h>
#define MAX_SIZE 50
//int 范围 十进制:-2147483648~2147483647
// 十六进制:-0x80000000~0x7FFFFFFF
//设置标志位
//分别是成功 上溢 下溢 错误 空
typedef enum{
SUCC, UPOVER, DOWNOVER, ERR, NUL
} Status;
Status StrToInt(char *string, int *e)
{
//先求字符串的长度
int StrLeng = strlen(string);
int number = 0;
if (0 == StrLeng)
{
return NUL;
}
else if (1 == StrLeng)
{
if (*string >= '0'&&*string <= '9')
{
*e = *string - '0';
return SUCC;
}
else
{
return ERR;
}
}
else
{
if (*string == '-')
{
++string;
while (*string != '\0')
{
if (*string >= '0'&&*string <= '9')
{
number = number * 10 + *string - '0';
if (number > 0x80000000)
{
return DOWNOVER;
}
}
else
{
return ERR;
}
string++;
}
*e = 0 - number;
return SUCC;
}
else
{
if (*string == '+')
{
++string;
}
while (*string != '\0')
{
if (*string >= '0'&&*string <= '9')
{
number = number * 10 + *string - '0';
if (number > 0x7FFFFFFF||number<0)
{
return UPOVER;
}
}
else
{
return ERR;
}
string++;
}
*e = number;
return SUCC;
}
}
}
int main()
{
Status flg;
int num;
int i;
char TestTxt[][MAX_SIZE] = { "12345", "+1235", "-12345", "+", "-55","+55", "-5", "5f5", "99999999999999", "-9999999999999999" ,
"2147483646","2147483647","2147483648","2147483649",
"-2147483646","-2147483647","-2147483648","-2147483649","","-1"};
for (i = 0; i < sizeof(TestTxt)/MAX_SIZE; i++)
{
flg = StrToInt(TestTxt[i], &num);
if (flg == SUCC)
{
printf("字符串%s转化为数字为%d\n", TestTxt[i], num);
}
else if (flg == UPOVER || flg == DOWNOVER)
{
printf("字符串%s超出了范围\n", TestTxt[i]);
}
else if (flg == ERR)
{
printf("字符串%s有非法字符\n", TestTxt[i]);
}
else
{
printf("字符串为空\n");
}
}
return 0;
}