//习题7-8
//将字符串转换成十进制数
//输入一个以#结束的字符串,滤去所有的非十六制字符,如果过滤后字符串的首字符为“-”,代表该数是负数。
#include<stdio.h>
int main()
{
int i,k,j,flag;
int a[20],b[10];
long num;
printf("enter a string: ");
i=0;
while( (a[i]=getchar())!='#')
i++;
a[i]='\0';
j=0;
if(a[0]=='-')
flag=-1;
else
flag=1;
for(i=0; a[i]!='\0'; i++)
{
if(a[i]>='0'&&a[i]<='9'||a[i]>='A'&&a[i]<='F'||a[i]>='a'&&a[i]<='f')
{
b[j]=a[i]; //放入新字符串
j++;
}
}
b[j]='\0'; //新字符串结束标志
printf("new string: ");
for(j=0; b[j]!='\0'; j++)
{
putchar(b[j]);
}
printf("\n");
num=0;
for(i=0; b[i]!='\0'; i++)
{
if(b[i]>='0'&&b[i]<='9')
num=num*16+b[i]-'0'; //当hexad[i]是数字字符时
else if(b[i]>='a'&&b[i]<='f')
num=num*16+b[i]-'a'+10; //当hexad[i]是小写英文字符时
else if(b[i]>='A'&&b[i]<='F')
num=num*16+b[i]-'A'+10; //当hexad[i]是大写英文字符时
}
printf("num=%ld\n",num*flag);
return 0;
}
//输出
enter a string: -zy1+ak0bq? #
new string: 1a0b
num=-6667