4.4 基于switch语句的译码器(C语言实现)

【题目描述】给定一个前缀码表如下:a—1,b—01,c—001。又有一个0/1字符串为“001011101001011001”,编写一个C程序,按照给定的前缀码表为该字符串译码。
【题目分析】前缀码是一种无二义性的编码,因此可以作为一种编码体制被广泛应用。一些编码,例如:a—001,b—0011,c—1,这就会出现所谓的译码时的二义性,也就是说当翻译到0011时无法确定是b还是ac。因此如果设计长短不一的编码,必须使用前缀码。应用广泛的哈夫曼编码就是一种前缀码。现要求编写一个程序来为已知的这串0/1代码译码。译码的方法很多,最为直观、简单的译码方式:应用switch语句的嵌套进行译码。
【代码实现】

// 基于switch语句的译码器
# include <stdio.h>
int main()
{char string[30] = "001011101001011001"; // 给定0/1字符串 int pos = 0; // 字符数组下标从0开始 while (string[pos] != '\0') {switch (string[pos]) { // 遍历字符数组中的每一个字符 case '0':switch (string[pos + 1]) {case '0':putchar('c'); // 依据前两个字符已经可以判断出是字符c:001 pos += 3; // 字符数组下标加3break; case '1': putchar('b'); // 输出字符b:01 pos += 2; // 字符数组下标加2break;}break;case '1': putchar('a'); // 输出字符a:1 ++pos; // 字符数组下标加1break; }}return 0;
}

【书上参考答案】

#include "stdio.h"
void Decode(char *str, int n);
int main()
{char str[18] = "001011101001011001";Decode(str, 18);getchar();return 0;
}void Decode(char *str, int n)
{int i = 0;while (i < n) {switch (str[i]) {case '1': printf("a"); break;case '0':{++i;switch (str[i]) {case '1': printf("b"); break;case '0':{++i;switch (str[i]) {case '1': printf("c"); break;}break;}}break;}}++i;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天五分钟计算机视觉:经典的卷积神经网络之VGG-16模型

VGG-16 Vgg16是牛津大学VGG组提出来的,相比于AlexNet来说,AlexNet的一个改进是采用连续的几个4*3的卷积核来代替AlexNet中的较大的卷积核(11*11,5*5)。前面我们也说过了使用小卷积核是优于大的卷积核的,因为多层非线性层可以增加网络深度来保证学习到更加复杂的模式,而且代…

TTM Squeeze挤牌指标选股公式,通过波动率和动量判断能量释放

TTM Squeeze&#xff08;挤牌&#xff09;是由约翰卡特(John Carter)发明的波动率和动量指标&#xff0c;在其著作《驾驭交易》中进行了介绍。当价格在窄幅区间震荡盘整为下一次大幅上涨或下跌积蓄能量时&#xff0c;就可以用挤牌指标来识别。Squeeze的意思是“挤压”&#xff…

速通MySql

一、简介 1、什么是数据库 数据仓库&#xff0c;用来存储数据。访问必须用SQL语句来访问 2、数据库的类型 1、关系型数据库&#xff1a;Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询&#…

模糊C均值(Fuzzy C-means,FCM)聚类的python程序代码的逐行解释,看完你也会写!!

文章目录 前言一、本文的原始代码二、代码的逐行详细解释总结 前言 接上一篇博客&#xff0c;详细解释FCM聚类的程序代码&#xff01;&#xff01; 一、本文的原始代码 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets import skfuzzy as…

Open3D 最小二乘拟合二维直线(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 平面直线的表达式为: y = k x + b

【软件推荐】卸载360软件geek;护眼软件flux;

卸载360软件geek f.lux: software to make your life better (justgetflux.com) 卸载完扫描残留 护眼软件 hf.lux: software to make your life better (justgetflux.com)https://justgetflux.com/https://justgetflux.com/

【Java8系列06】Java8数据计算

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

springMVC 三大组件解析

springMVC组件概述 DispatcherServlet&#xff08;调度器Servlet&#xff09;&#xff1a; DispatcherServlet 是 Spring MVC 的前端控制器&#xff08;Front Controller&#xff09;。它负责接收来自客户端的请求&#xff0c;然后将请求分发给相应的处理器&#xff08;Control…

应用于智慧工地的AI边缘计算盒子+AI算法软硬一体化方案

智慧工地解决方案&#xff0c;围绕施工工地最常见的工人工服识别、安全帽佩戴识别、人脸识别、安全周界检测、打电话/吸烟、摔倒检测、明火检测、渣土车、土堆裸露识别等一系列子场景专门推出的通用解决方案&#xff0c;着眼工地安全施工、规范人员进出、保护设备安全等刚性需求…

vscode插件问题

1 Vscode code颜色变化 最外层标签颜色变成白色 其他标签有颜色&#xff0c;css代码颜色有些变成白色 是安装的另一个插件vue影响的&#xff0c;卸载就能恢复正常的颜色 2 配置Vue项目的代码片段 css 样式代码片段 配置css.json上后偶尔能用偶尔不能用&#xff0c;Vscode 右下…

Windows核心编程 远程线程注入

目录 线程安全 C线程 C STL线程 远程线程注入概述 相关API CreateRemoteThread LoadLibrary VirtualAllocEx FreeLibrary GetProcAddress 远程线程注入 DLL卸载 调试DLL 线程安全 变量在单线程和在多线程都不会出问题 - 线程安全 变量在多线程出问题&#xff0c…

entos定时自动备份mysql

Centos定时自动备份mysql 文章目录 Centos定时自动备份mysql1.先安装相关工具2.创建dump.sh命令文件3.编写命令文件规则4.文件夹路径5.添加crontab任务6.编写cron规则 1.先安装相关工具 共两个&#xff0c;一个是cronie 一个是 mysql-client&#xff08;一般装完mysql就自带的有…

MySQL-数据库设计与实现

目录 第1关&#xff1a;从概念模型到MySQL实现 第2关&#xff1a;从需求分析到逻辑模型 第3关&#xff1a;建模工具的使用 第1关&#xff1a;从概念模型到MySQL实现 任务描述 将已建好的概念模型&#xff0c;变成MySQL物理实现。 # 请将你实现flight_booking数据库的语句写…

CCC数字车钥匙(八)——BLE配对相关字段

2.1 配对连接协议 2.1.3 所有者配对广播 对于所有者配对&#xff0c;仅支持Legacy LE 1M PHY。ADV_IND需要按照Section 2.3.1.1 Volume 6 Part B。 事件类型&#xff1a;无指向可连接和可扫描。 ADV_IND中包含广播地址和广播数据&#xff0c;如下所示&#xff0c;其中广播地址…

TZOJ 1402 Bitset

答案&#xff1a; #include <stdio.h> int main() {int n 0, j 0; while (scanf("%d", &n) ! EOF && (n>0 && n<1000)) //多组输入{int arr[32], i 0;while (n > 0) {arr[i] n % 2; //除2取余法n / 2;}for (j i -…

力扣题:字符的统计-12.1

力扣题-12.1 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;451. 根据字符出现频率排序 解题思想&#xff1a;统计字符出现的个数&#xff0c;进行排序即可 class Solution(object):def frequencySort(self, s):""":type s: str:…

【C/PTA】指针专项练习(二)

本文结合PTA专项练习带领读者掌握指针&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 6-1 鸡兔同笼问题6-2 冒泡排序6-3 字符串反正序连接6-4 计算最长的字符串长度6-5 查找星期7-1 C程序设计 实验5-7 数组指针作函数参数7-2 查…

使用glBlitFramebuffer将2D多采样纹理转换为2D普通纹理的教程

介绍&#xff1a; 在计算机图形编程中&#xff0c;有时你可能需要将2D多采样纹理转换为普通2D纹理。这种转换在实现不需要多采样的后处理效果时非常有用。OpenGL中的glBlitFramebuffer函数为高效实现此转换提供了便捷的方法。本教程将指导你如何使用glBlitFramebuffer从多采样…

【数据结构】哈夫曼树(Huffman Tree)和哈夫曼编码(Huffman Coding)

哈夫曼树&#xff08;Huffman Tree&#xff09;和哈夫曼编码&#xff08;Huffman Coding&#xff09;是数据压缩领域常用的技术。哈夫曼树是一种特殊的二叉树&#xff0c;用于构造哈夫曼编码&#xff0c;而哈夫曼编码则是一种变长编码&#xff0c;用于压缩数据。 在解释哈夫曼…

文心一言 VS 讯飞星火 VS chatgpt (147)-- 算法导论12.2 2题

二、用go语言&#xff0c;写出 TREE-MINIMUM 和 TREE-MAXIMUM 的递归版本。 灵捷3.5 。 文心一言&#xff1a; 以下是用 Go 语言编写的树的最大值和最小值的递归版本代码&#xff1a; package main import ( "fmt" ) type TreeNode struct { Val int Le…