练习2.3

来源:互联网 发布:cdo 首席数据官 编辑:程序博客网 时间:2024/06/09 15:22

编程:将十六进制数字组成的字符串(包含可选的0X或0x)转换成与之等价的整型值。

 

说明:这里的十六进制数字组成字符串,我们把它当作是十六进制数的真值;转换得到10进制的真值。

 

程序思路:就是”多项式替换法“。

 

#include <stdio.h>#include <ctype.h>int htoi(char *s);int main(int argc, char *argv[]){    char line[10] = "";    scanf("%s", line);    printf("%d\n", htoi(line));    return 0;}int htoi(char *s){    size_t i = 0;    if (s[i] == '0' && (s[i+1] == 'X' || s[i+1] == 'x'))        i += 2;    int sum = 0;    while (isdigit(s[i]) || (s[i] >= 'A' && s[i] <= 'F') || (s[i] >= 'a' && s[i] <= 'f')) {        int n = 0;//每一次循环得到一个特定位置的数值        if (isdigit(s[i])) {            n = s[i] - '0';        } else if (s[i] >= 'A' && s[i] <= 'F') {            n = s[i] - 'A' + 10;        } else {            n = s[i] - 'a' + 10;        }        sum = sum * 16 + n;        ++i;    }    return sum;}