输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。


/*习题7-8 字符串转换成十进制整数(15 分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,
然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入在一行中给出一个以#结束的非空字符串。
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。*/
#include<stdio.h>
#include<string.h>
#include<math.h> 
int main(void){
    
    int a[100]={0};
    char str[100];                        
    gets(str);
    int m,i,j,flag,sum,k;
    m=strlen(str);
    j=0,flag=1;
    for(i=0;i<m;i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            a[j]=str[i]-48;
            //printf("a[%d]=%d\n",j,a[j]); 
            j++;
        }
        else if(str[i]>='A'&&str[i]<='F')
        {
            a[j]=str[i]-55;
            //printf("大:a[%d]=%d\n",j,a[j]);
            j++;
        }
        else if(str[i]>='a'&&str[i]<='f')
        {
            a[j]=str[i]-87;
            //printf("小:a[%d]=%d\n",j,a[j]);
            j++;
        }
        if(str[i]=='-'&&j==0)                //判断第一个十六进制字符之前是否存在字符“-”
            flag=-1;    
    }
    sum=0,k=0;
    for(i=j-1;i>=0;i--)                            //16进制的数字转化成10进制的数字 
    {
        sum+=a[i]*pow(16,k);
        k++;
    }    
    if(sum==0)                                    //0不能输出-0 
        printf("0\n");
    else{                                         
        sum=flag*sum;
        printf("%d",sum);
    }
    
    return 0;
}

#include <stdio.h>
int main()
{
    int ch;
    int sign = 1,flag=0;
    int n = 0;
    while ((ch = getchar()) != '#')
    {
        if ((flag==0)&&(ch == '-'))
            sign = -1;
        else if (ch >= '0' && ch <= '9')
        {
            n = n * 16 + ch - '0';
            flag=1;
        }
        else if (ch >= 'a' && ch <= 'f')
        {
            n = n * 16 + 10 + ch - 'a';
            flag=1;
        }
        else if (ch >= 'A' && ch <= 'F')
        {
            n = n * 16 + 10 + ch - 'A';
            flag=1;
        }
    }
    printf("%d\n", sign * n);
}
#include <stdio.h>

int main()
{
    int ch;
    int sign = 1;
    int n = 0;
    while ((ch = getchar()) != '#')
    {
        if (ch == '-')
            sign = -1;
        else if (ch >= '0' && ch <= '9')
            n = n * 16 + ch - '0';
        else if (ch >= 'a' && ch <= 'f')
            n = n * 16 + 10 + ch - 'a';
        else if (ch >= 'A' && ch <= 'F')
            n = n * 16 + 10 + ch - 'A';
    }
    printf("%d\n", sign * n);
}