C程序设计语言习题2-3答案

简介: 编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0X和0x),转化为与之等价的整数值, 字符串中包含的字符可以是0 - 9,A - F,a - f

问题描述

编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0X和0x),转化为与之等价的整数值, 字符串中包含的字符可以是0 - 9,A - F,a - f。

问题拆分

  • 主函数main
  • 接收用户输入字符串函数 get_line (注意不能按照书本上的getline,因为次函数已在stdio.h 中定义了)
  • 将十六进制字符串转化成十进制整数(这是核心)

代码实现

#include<stdio.h>

#define LINE 1000  //每行接收的最大字符数
#define DEC 10     //数字10
#define HEX 16     //数字16

int get_line(char s[]);
int htoi(char s[]);

int main()
{
    char line[LINE];
    int len;
    int dec;

    while(len = get_line(line) > 0){
        printf("Hex is: %s \n", line);
        dec = htoi(line);
        printf("Dec is: %d \n", dec);
    }
    return 0;
}
//接收每次输入的字符,并返回长度
int get_line(char s[])
{
    int i;
    char c;

    for(i = 0; i < LINE - 1 && (c = getchar()) != EOF && c != '\n'; i++){
        s[i] = c;
    }
    s[i] = '\0';
    return i;
}

/*
 *十六进制字符串转为十进制整数,
 *算法描述: 例如输入字符串 0x32, 那么result = 3 * 16^1 + 2 * 16 ^ 0
 */
int htoi(char s[])
{
    int dec, len, i, n, j, ji, k;
    len = 0;
    dec = 0;
    while(s[len] != '\0'){
        len++;  //获取字符串长度
    }
    //return len;
    j = 0;
    for(i = len - 1; i >= 2; i--){
            //处理不同字符串
        if(s[i] >= '0' && s[i] <= '9'){
            n = s[i] - '0';        
        }else if(s[i] >= 'a' && s[i] <= 'f'){
            n = s[i] - 'a' + DEC;
        }else if(s[i] >= 'A' && s[i] <= 'F'){
            n = s[i] - 'A' + DEC;
        }
        
        ji = 1;
        if(j == 0){
            ji = 1;
        }else{
            k = j;
            while(k > 0){
                ji = ji * HEX;
                k--;
            }
        }
        j++;
        dec = dec + ji * n;
    }
    return dec;
}
目录
相关文章
|
6月前
|
存储 算法 C语言
C语言初学者超详细习题库1(含题目以及代码讲解)
C语言初学者超详细习题库1(含题目以及代码讲解)
78 1
|
C语言
C语言循环程序的一些初级编程题目
C语言循环程序的一些初级编程题目
C语言循环程序的一些初级编程题目
|
C语言
C语言分支程序的一些初级编程题目
C语言分支程序的一些初级编程题目
|
C语言
别瞎找了,你要的C语言经典示例都在这~
别瞎找了,你要的C语言经典示例都在这~
50 1
|
C语言
明解C语言第七章习题
明解C语言第七章习题
|
C语言
明解C语言第八章习题
明解C语言第八章习题
|
算法 C语言 索引
从0到1 拿下C语言—程序结构及使用示例
此文为第二章,主要就是为了让大家了解C语言相关的编程规则。这一章节内容需要认真学习!
108 0
从0到1 拿下C语言—程序结构及使用示例
|
算法
C程序设计语言第二版习题2-9
在求反码时,表达式 x &= (x - 1) 用于把x最右边的值为1的位删除掉。请解释一下这样做的道理。用这一方法重写bitcount函数 ,使之执行得更快一点
828 0
C程序设计语言第二版习题4-1
编写一个函数strrindex(s, t),用于返回字符串t在s中最右出现的位置,如果 s中不 包含t,那么返回-1。
3684 0
|
机器学习/深度学习 算法 JavaScript
C程序设计语言第二版习题3-5
编写函数itob(n, s, b) ,用于把整数n转换成以b为基数的字符串并存到字符串s中。例如, itob(n, s, 16) 表示将n转换成16进制数,并存入s中。
972 0