《C程序设计语言》2-3
#include <stdio.h>
#define YES 1//是十六进制数
#define NO 0//不是十六进制数
/*
编写htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。
字符串中允许包含的数字包括:0~9,a~f或A~F
*/
int htoi(char s[]);
int main()
{
char s[] = "0x1278AFC89";
int n = htoi(s);
printf("%d\n", n);
return 0;
}
int htoi(char s[])
{
int i = 0, n = 0, temp = 0;
int flag = YES; //是否为十六机制数标志
if(s[i] == '0'){
i++;
if(s[i] == 'X' || s[i] == 'x')
i++;
}
while(s[i] != '\0' && flag == YES){
if(s[i] >= '0' && s[i] <= '9')
{
temp = s[i] - '0';
flag = YES;
}
else if(s[i] >= 'a' && s[i] <= 'f'){
temp = 10 + s[i] - 'a';
flag = YES;
}
else if(s[i] >= 'A' && s[i] <= 'F'){
temp = 10 + s[i] - 'A';
flag = YES;
}
else
flag = NO;//若字符串里含有不是十六进制数的字符,则返回此字符之前的字符串对应的整型值。
if(flag == YES){//只有当是十六进制数时才进行计算
n = n * 16 + temp;
}
i++;
}
return n;
}
PS:注意判断条件,我做此题时,就忽略了字符串中含有不是十六进制数时的情况。