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;
}
目录
相关文章
|
存储 项目管理 开发工具
云效常见问题之上传文件的情况下单文件大小限制如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
359 0
vue+element Form键盘回车事件页面刷新解决
问题描述:如下代码所示,使用element-ui 中的el-form组件对table进行条件查询,当查询条件仅有一项时,使用@keyup.
1695 0
|
11月前
|
存储 安全 API
从零开始认识 API,可以从哪几个方面入手
API(应用程序编程接口)是软件组件间通信的桥梁,通过预定义的函数、规则或协议实现数据和功能的交换。API 的工作原理是客户端向服务器发送请求,服务器处理后返回响应。其主要作用包括提高开发效率、促进软件的可扩展性和可维护性、实现数据共享和系统集成。API 类型多样,包括数据 API、操作系统 API、远程 API 和网络 API 等。使用 API 时需查阅官方文档、使用开发工具和抓包工具,并注意认证与授权、输入验证和数据加密等安全事项。
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的西红柿成熟度检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的西红柿成熟度检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的固定资产管理
【7月更文挑战第25天】 ERP系统中的固定资产管理
525 2
|
10月前
|
存储 数据处理 数据中心
1U和2U服务器应如何正确选择?各有什么优缺点?
标准机架式服务器以U为高度单位,1U和2U服务器各有优缺点。1U服务器体积小、性价比高,但扩展性和散热性较差;2U服务器扩展性好、散热佳、稳定性强,但托管费用较高。不同高度的服务器适用于不同的业务场景,选择时需根据具体需求决定。未来数据中心将根据业务特性选择合适的服务器类型,而非统一采用2U服务器。
278 2
|
小程序
【微信小程序】滚动 轮播图 文本
🍒小程序的宿主环境 - 组件 1.scroll-view 组件的基本使用 2.swiper 和 swiper-item 组件的基本使用 3.text 组件的基本使用 4.rich-text 组件的基本使用
【微信小程序】滚动 轮播图 文本
|
机器学习/深度学习 自然语言处理 达摩院
模型精度再被提升,统一跨任务小样本学习算法 UPT 给出解法!
UPT是一种面向多种NLP任务的小样本学习算法,致力于利用多任务学习和预训练增强技术,在仅需要标注极少训练数据的情况下,提升大规模预训练语言模型在多种场景下的模型精度。
|
测试技术 Android开发
Android实现同时安装测试环境与生产环境包,及区分app名和图标
众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。
608 0
Android实现同时安装测试环境与生产环境包,及区分app名和图标
Material Design 实战 之第三弹—— 悬浮按钮和可交互提示(FloatingActionButton & Snackbar & CoordinatorLayout)
Material Design 实战 之第三弹—— 悬浮按钮和可交互提示(FloatingActionButton & Snackbar & CoordinatorLayout)