要求:输入一个字符串,里面包含 ,可能为10进制或者8进制或者16进制的数字
然后将字符串里面各个进制的数转化为十进制数字输出
c程序实现如下:
#include<stdio.h>
#include<assert.h>
#include<ctype.h>
static int to_Hex(const char* str)
{
//0123456789abcdefABCDEF
int sum = 0;
while (isxdigit(*str))
{
if (isdigit(*str))
{
sum = sum * 16 + *str - '0';
}
else
{
tolower(*str);
sum = sum * 16 + *str - 'a' + 10;
}
str++;
}
return sum;
}
static int to_Oct(const char* str)
{
//01234567
int sum = 0;
while (isdigit(*str) && *str != '8' && *str != '9')
{
sum = sum * 8 + *str - '0';
str++;
}
return sum;
}
static int to_Dec(const char* str)
{
//0123456789
int sum = 0;
while (isdigit(*str))
{
sum = sum * 10 + *str - '0';
str++;
}
return sum;
}
int My_atoi(const char* str)
{
assert(str != NULL);
if (NULL == str)
return 0;
int tmp = 1;//正负标记
int sum = 0;
while (isspace(*str))
{
str++;
}
if (*str == '-')
{
tmp = -tmp;
str++;
}
if (*str == '+')
{
str++;
}
if (*str == '0')
{
if (*(str + 1) == 'x' || *(str + 1) == 'X')
{
sum = to_Hex(str + 2);
}
else
{
sum = to_Oct(str + 1);
}
}
else
{
sum = to_Dec(str);
}
return sum * tmp;
}
int main()
{
const char *str1 = " -0123";
const char* str2 = " 123a";
const char* str3 = " -0X123F";
const char* str4 = " +123";
int tmp1 = My_atoi(str1);
int tmp2 = My_atoi(str2);
int tmp3 = My_atoi(str3);
int tmp4 = My_atoi(str4);
printf("%d\n", tmp1);
printf("%d\n", tmp2);
printf("%d\n", tmp3);
printf("%d\n", tmp4);
return 0;
}程序运行结果为:

版权声明:本文为qq_42795061原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。