输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+-P-xf4+-1!#
输出样例:
-3905
我的代码:
#include<stdio.h>
int judge(char s);//判断是不是十六进制数
int main (){
int i=0,j,k=0,number=0;
char a[80], b[80];
while((a[i]=getchar())!='#'){
i++;
}
a[i]='\0';//输入字符串数组
for(j=0;j<i;j++){
if(judge(a[j])==1||a[j]=='-'){
b[k]=a[j];
k++;
}
}//b[k]储存‘-’和十六进制数
for(i=0;i<80;i++){
if(b[i]>='0'&&b[i]<='9') number=number*16+b[i]-'0';
if(b[i]>='a'&&b[i]<='f') number=number*16+b[i]-'a'+10;
if(b[i]>='A'&&b[i]<='F') number=number*16+b[i]-'A'+10;
}
if(b[0]=='-') number=number*(-1);//如果十六进制数前有负号,最后值为负数
printf("%d",number);
return 0;
}
int judge(char s){
int ret=0;
if ((s>='0'&&s<='9')||(s>='a'&&s<='f')||
(s>='A'&&s<='F')) ret=1;
return ret;
}
这篇博客介绍如何处理一个包含十六进制字符的字符串,去除非十六进制字符并判断正负,最终将字符串转换为十进制数。示例代码展示了实现过程。
583

被折叠的 条评论
为什么被折叠?



