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

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

输入格式:

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

输出格式:

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

输入样例:

±P-xf4±1!#

输出样例:

-3905

#include 
int main(void){
	char str[80]; char hexad[80];
	int i = 0, k= 0;
	while((str[i] = getchar ()) != '#')//注意getcahr的格式 以‘#’结尾不能用gets
		i++;
	str[i] = '\0';
for(i = 0; str[i] != '\0'; i++){
	if(str[i] >= '0'&& str[i] <= '9' || str[i] >= 'a' && str[i] <= 'f' || str[i] >= 'A' && str[i] <= 'F'){
	hexad[k] = str[i];//十六进制放入新数组中
	k++;
	}
}
hexad [k] = '\0';

long number = 0;
for(i = 0; hexad[i] != '\0'; i++){
	if(hexad[i] >= '0' && hexad[i] <= '9')
		number = number *16 + hexad[i] - '0';//这个进制变换式子需要熟悉一下
	if(hexad[i] >= 'a' && hexad[i] <= 'f')
		number = number *16 + hexad[i] - 'a'+ 10;
	if(hexad[i] >= 'A' && hexad[i] <= 'F')
		number = number *16 + hexad[i] - 'A' + 10;
}
if(str[0] == '-') 
	number = -number;
printf("%ld", number);
return 0;
}

pta显示两个负号的时候错误,不知道为什么。
这个题主要掌握进制变换的方法,以及字符串的输入输出。

你可能感兴趣的:(习题7-8 字符串转换成十进制整数 (15分))