字符串转化为10进制整数

输入一个以‘#’结束的字符串,滤去所有的非十六进制字符(不分大小写)然后,将其转换为十进制后输出。如果过滤后字符串的首字符为"-",代表该数是负数。输出整数。
//请问为什么我这里要怎样才能让他能运行得了呢(如果哪里有错请指正,谢谢❤️)
#include<stdio.h>
#include<math.h>
int main()
{
char a[100],b[100];
int i=0,j,k=0,h,index=0;
while((a[i]=getchar())!='#')
{
i++;
}
a[i]='\0';
for(j=0;j<i;j++)
{
if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='z')||(a[j]>='0'&&a[j]<='9'))
{
b[k]=a[j];k++;
}
}
if(b[0]=='-'){b[0]=-1;}
for(h=k;h>0;h--)
{
b[h]=b[h]pow(16,h);
index+=b[h];
}
index
=b[0];
printf("转换数为:%d",index);
return 0;
}

if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='z')||(a[j]>='0'&&a[j]<='9'))
怎么会是a到z呢,16进制只能是a到f啊
if(b[0]=='-'){b[0]=-1;} ----------你上面的代码根本就不可能将b[0]设置为'-'啊,你只过滤出字母和数字啊