PTA-实验7-3-6 字符串转换成十进制整数

PTA-实验7-3-6 字符串转换成十进制整数在这里插入图片描述

#include <stdio.h>
#include <string.h>
int main(){
    char s[90]={'\0'};//存储初始字符串
    char a[90]={'\0'};//存储“去除所有的非十六进制字符(不分大小写)的字符串”
    gets(s);
    int i=0,j=0,flag=0,flag2=0;;//flag、flag2用于确保第一个十六进制字符之前是否存在字符“-”
    while(s[i]!='#'){
         if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='f')||(s[i]>='A'&&s[i]<='F')){
           a[j]=s[i];
           j++;
           flag2=1;
       }
         if(s[i]=='-'&&flag==0&&flag2==0)
                flag=1;
        i++;
    }
    int m=0;
    m=strlen(a);
    int n,b;
    int sum=0;
    for(b=0;b<m;b++){
        if(a[b]>='0'&&a[b]<='9')
            n=a[b]-'0';
        if(a[b]>='a'&&a[b]<='f')
            n=a[b]-'a'+10;
        if(a[b]>='A'&&a[b]<='F')
            n=a[b]-'A'+10;
        sum=sum*16+n;
    }
    if(flag==1&&sum!=0)//"sum!=0"可以避免输出-0
        printf("-%d",sum);
    else
        printf("%d",sum);
    return 0;}

问题细分为:
1、过滤非16进制字符
2、如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
3、16进制转换为10进制
逐个突破


版权声明:本文为buibuibui816原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。