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版权协议,转载请附上原文出处链接和本声明。