##习题7-8 字符串转换成十进制整数 (15分)

  • Post author:
  • Post category:其他


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

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

±P-xf4±1!#

输出样例:

-3905

在这里插入代码片
#include<stdio.h>
#include<string.h>
#include<math.h>
int num(char);
int main()
{
  char str[1000],str1[1000];
  gets(str);
  int i=0,k=0;
  //过滤带符号的  不要忘记I++
  while(str[i]!='\0'){
    if((str[i]>='A'&&str[i]<='F')||(str[i]>='a'&&str[i]<='f')||(str[i]>='0'&&str[i]<='9')||str[i]=='-'){
        str1[k]=str[i];
        k++;
        }
        i++;
  }
  //如果第一个字符是-号
  int flag=1;
  if(str1[0]=='-')
     flag=-1;
     //初始化  过滤不带负号
  k=0;
  i=0;
  while(str[i]!='\0'){
       if((str[i]>='A'&&str[i]<='F')||(str[i]>='a'&&str[i]<='f')||(str[i]>='0'&&str[i]<='9')){
         str1[k]=str[i];
        k++;
       }
       i++;
  }
  int sum=0;//i控制幂次 j控制数组取值  不许定义为%d  否则会报错
  for(int j=k-1,i=0;j>=0;i++,j--){
    if(str1[j]>='0'&&str1[j]<='9'){
        sum+=(str1[j]-48)*pow(16,i);
    }else{
    sum+=num(str1[j])*pow(16,i);
    }
  }
  printf("%d",flag*sum);
  return 0;
}
int num(char c){
    if(c=='a'||c=='A')
        return 10;
        if(c=='b'||c=='B')
        return 11;
         if(c=='c'||c=='C')
        return 12;
         if(c=='d'||c=='D')
        return 13;
        if(c=='e'||c=='E')
        return 14;

         if(c=='f'||c=='F')
        return 15;

    }



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