my_atoi函数:将字符串转换成整型(八进制、十进制以及十六进制数字)
int my_atoi(const char* str)//字符串转成整型
{
assert(str != NULL);
int sum = 0;
if (str == NULL || *str == '\0') return sum;
int tag = 0;//0 正数 1 负数
while (isspace(*str))//消除空格
{
str++;
}
if (*str == '-')
{
tag = 1;
str++;
}
else if (*str == '+')//判断正负
{
tag = 0;
str++;
}
if (*str == '0')// 0 0x 0X 八进制或者十六进制
{
if (*(str + 1) == 'x' || *(str + 1) == 'X')// 16进制
{
sum = my_hex(str + 2);// 跳过0x或者0X
}
else// 8进制
{
sum = my_oct(str + 1);// 跳过0
}
}
else// 10进制
{
sum = my_dec(str);
}
if (tag )
{
sum = -sum;
}
return sum;
}
int main()
{
const char* str[] = {
"2345", // 2345
"0234", // 156
"0xff", // 255
" 342.345", // 342
" +12adg", // 12
" -0234", // -156
" -0x12abc", //
};
int n = sizeof(str) / sizeof(str[0]);
for (int i = 0; i < n; i++)
{
printf("%s => %d \n", str[i], my_atoi(str[i]));
}
return 0;
}