刚做了笔试,记录一下其中一道算法题。编写一个函数,该函数功能就是把传入的字符串识别出十六进制、十进制、二进制,然后进行转换返回int类型,十六进制的前缀"0x",如"0x1f",二进制的前缀是"0",如"01011",十进制无前缀。下面代码仅供参考,如有错误还望指出。
#include <stdio.h>
#include <stblib.h>
int fun(const char *str)
{
int i;
int j;
int sum=0;
if(str[0]=='0'&&str[1]=='x')
{
i=2;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
{
j=str[i]-'0';
}
else if(str[i]>='a'&&str[i]<='f')
{
j=str[i]-'a'+10;
}
else if(str[i]>='A'&&str[i]<='F')
{
j=str[i]-'A'+10;
}
else
{
exit(-1);
}
sum*=16;
sum+=j;
i++;
}
}
else if(str[0]=='0')
{
i=1;
while(str[i]!='\0')
{
if(str[i]=='0'||str[i]=='1')
{
j=str[i]-'0';
}
else
{
exit(-1);
}
sum*=2;
sum+=j;
i++;
}
}
else
{
i=0;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
{
j=str[i]-'0';
}
else
{
exit(-1);
}
sum*=10;
sum+=j;
i++;
}
}
return sum;
}
int main(void)
{
char test[4][8]={"0111","0x1f","13552","342D4"};
int i;
for(i=0;i<4;i++)
{
printf("%d\n",fun(test[i]));
}
return 0;
}
输出:
7
31
13552
exit status 255