题目:
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i,j,k=0,wei;
long value;
char a[100],b[100],*end;
char shi[]="0123456789abcdefABCDEF";
fgets(a,100,stdin);
for(i=0;i<(int)strlen(a);i++)
{
for(j=0;j<(int)strlen(shi);j++)
{
if(a[i]==shi[j])
{
if(k==0)
wei=i;
b[k]=a[i];
k=k+1;
}
}
}
for(i=0;i<wei;i++)
{
if(a[i]=='-')
{
for(j=k-1;j>=0;j--)
b[j+1]=b[j];
b[0]='-';
k++;
break;
}
}
printf("%ld",strtol(b,&end,16));
}
还可以利用ascll码将数组b中的a-f转化为10-15,(a-f:字符-87,A-F:字符-55),然后利用pow()函数转换,但是这样做数据很容易溢出。