当前位置: 首页
AI教程
C程序设计语言习题2-3答案详解

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

热心网友 时间:2026-06-11
转载

实现函数htoi将十六进制字符串(可含0x或0X前缀)转换为十进制整数。算法从字符串尾部逐位计算,跳过前两个前缀字符,按位权累加结果,输出对应的整数值。该函数支持大小写十六进制数字。

C语言经典练习:十六进制字符串转整数问题

先来看一个经典的C语言练习题:编写一个函数htoi(s),将包含十六进制数字的字符串(允许带有可选的0x0X前缀)转换为对应的十进制整数值。字符串中可能出现的合法字符包括0-9A-Fa-f。看似简单,但实际处理时涉及前缀识别、字符有效性验证以及位权计算等细节,值得深入推敲。

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

分步拆解程序功能模块

整个程序可以拆分为几个独立的功能模块:

  • 主函数main负责获取用户输入,并循环调用转换函数完成多次转换;
  • 输入函数get_line(注意命名规范,因为标准库stdio.h中已存在getline,此处不能直接使用)用于读取一行输入字符串;
  • 核心函数htoi是整个程序的关键,负责将十六进制字符串转化为十进制整数。

完整代码实现与算法解析

下面给出完整的实现代码,并附上必要的注释帮助理解。算法逻辑非常直观:例如输入0x32,结果等于 3 × 16¹ + 2 × 16⁰,只需从字符串尾部往前逐位计算即可。

#include
#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++;    // 获取字符串长度
    }

    j = 0;
    for (i = len - 1; i >= 2; i--) {   // 从最后一位往前,跳过前两个字符("0x")
        // 处理不同字符
        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;
}

代码中htoi函数从字符串尾部开始逐位计算,变量j记录当前位数(0表示个位,1表示十六位,以此类推),每次循环更新位权ji并累加结果。需要特别注意的是,循环从下标len-1开始,直到下标2结束,目的是跳过开头的0x0X两个字符。这种实现思路清晰可靠,非常适合初学者理解十六进制转十进制的底层原理和位权计算方法。

来源:https://developer.aliyun.com/article/704673

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
MyShell发布开源AI语音克隆工具OpenVoice,瞄准语音模仿领域

MyShell发布开源AI语音克隆工具OpenVoice,瞄准语音模仿领域

MyShell最新推出的开源语音克隆工具OpenVoice引起了广泛关注。这一创新产品由麻省理工学院(MIT)、清华大学以及加拿大人工智能初创公司MyShell合作开发。OpenVoice采用了一种概念简单但高效的方法,可几乎即时克隆用户的语音,并使用明显更少的计算资源。该工具不仅具备语音克隆的基本

时间:2026-07-14 17:32
Open Voice:轻松克隆任何声音,免费开源的AI语音克隆项目

Open Voice:轻松克隆任何声音,免费开源的AI语音克隆项目

Open Voice是由MyShell推出的一个免费开源的AI即时语音克隆项目,相较于其他的语音克隆技术,OpenVoice的优势在于仅需一段简短的音频,便能以惊人的准确度复刻说话者的音色,创造出让人信以为真的自然语音。除开复制和参考说话者的音色之外,OpenVoice还可以对语音风格进行精细控制,

时间:2026-07-14 17:30
VoiceCanvas-AI语音克隆 & TTS工具 | 40+种语言语音合成

VoiceCanvas-AI语音克隆 & TTS工具 | 40+种语言语音合成

VoiceCanvas是什么?VoiceCanvas是由先进AI驱动的语音克隆与文本转语音工具,支持40+种语言的即时语音合成。其核心能力包括:高质量语音合成:具有自然语调和节奏的清晰人声个性化语音克隆:通过3-10秒语音样本创建专属AI声纹多语言支持:覆盖全球主流语种的男 女声选择进阶调控功能:语

时间:2026-07-14 17:30
Github爆火AI语音克隆项目OpenVoice,精准进行声音复刻

Github爆火AI语音克隆项目OpenVoice,精准进行声音复刻

最近,Github上的一个名为OpenVoice的AI语音克隆项目爆火,该项目由myshell-ai开源,仅开源了不到三周,就有了6 1k的star。OpenVoice仅需参考说话者的短音频片段,即可复制其声音并生成多种语言的语音。这一技术不仅实现了对音色的准确克隆,还在语音生成过程中提供了对情感、

时间:2026-07-14 17:27
Free Voice Cloning-免费AI语音克隆工具 | 5秒生成你的数字声音

Free Voice Cloning-免费AI语音克隆工具 | 5秒生成你的数字声音

Free Voice Cloning,一款真正0成本、无限制、跨语言的高质量AI语音克隆平台。适合内容创作者、教育者、AI开发者、播客人群等所有想要“复制自己的声音”并进行语音合成的用户。?️ Free Voice Cloning 是什么?Free Voice Cloning 是一个基于先进AI语音

时间:2026-07-14 17:27
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜