C语言十六进制数化十进制0
//程序功能:连续输入一批以#结束的字符串(字符串的长度不超过80),遇## 则全部输入结束。对每个字符串
// 做如下处理:滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转
// 换为十进制数后输出。
//提 示:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include "stdio.h"
#define MAXLEN 80
int main( )
{
int i,k;
long number;
char ch,oldch,str[MAXLEN], num[MAXLEN];
oldch=' ';
while((ch=getchar())!='#'||oldch!='#')
{
k=0;
while(ch!='#'&& k< MAXLEN-1)
{
str[k++]=ch;
ch=getchar();
}
oldch='#';
str[k]='\0';
//请在两条星线之间填入相应的代码, 滤去字符串str 中所有的非十六进制字符后,组
//成一个新字符串(十六进制形式),然后将其转换为十进制数。
/**************************************************************************/
for(i=0,k=0;str[i]!='\0';i++)
if((str[i]>='0' && str[i]<='9') || (str[i]>='A' && str[i]<='F') || (str[i]>='a' && str[i]<='f'))num[k++]=str[i];
num[k]='\0';
for(i=0,number=0;num[i]!='\0';i++)
if((str[i]>='0' && str[i]<='9'))number=number*16+(num[i]-48);
else if((str[i]>='A' && str[i]<='F')) number=number*16+(num[i]-55);
else number=number*16+(num[i]-87);
/**************************************************************************/
printf("%ld\n",number);
}
}
例如:括号内是说明
输入:
10#Pf4+1#-+A## (连续输入3个字符串)
输出:
16
3905
10
我的答案和这个例子不符合,为什么