当前位置: 首页 > news >正文

计算机网络——物理层(编码与调制)

计算机网络——编码与调制

  • 基带信号和宽带信号
  • 编码与调制
  • 数字数据编码为数字信号
    • 非归零编码
    • 归零编码
    • 反向不归零编码
    • 曼彻斯特编码
    • 差分曼彻斯特编码
    • 4B/5B编码
  • 数字数据调制为模拟信号
  • 模拟数据编码为数字信号
  • 模拟数据调制为模拟信号

我们之前讲了物理层的一些基础知识和两个准则,如果没有看过去前两次的小伙伴可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/136685045

https://blog.csdn.net/qq_67693066/article/details/136732100

今天我们来学习编码与调制:

基带信号和宽带信号

基带信号和宽带信号是通信领域中两种常见的信号类型,它们在传输方式、特性和应用上有所不同。

基带信号也称为基本频带信号或基频信号,是指信源(信息源,也称发终端)发出的没有经过调制(进行频谱搬移和变换)的原始电信号这种信号直接将数字信号1或0用两种不同的电压来表示,然后送到线路上去传输。基带信号的特点是频率较低,信号频谱从零频附近开始,具有低通形式。由于在近距离范围内基带信号的衰减不大,其信号内容不会发生变化。常见的基带信号如我们说话的声波,直接表达了要传输的信息。
宽带信号则是将基带信号进行调制后形成的频分复用模拟信号宽带信号通过调制技术将基带信号的频谱搬移到较高的频率处,使得每一路基带信号的频谱被搬移到不同的频段。这样,就可以在一条电缆中同时传送许多路的数字信号,从而提高了线路的利用率。在宽带信号传输中,各路信号在进入同一个有线的或无线的传输媒质之前,先被调制为互相不会混淆的已调制信号,然后在对方端再用解调技术恢复成原来的信号,实现多路复用的目的。
在这里插入图片描述

总结来说,基带信号是原始的、未经调制的信号,而宽带信号则是经过调制处理后的信号,可以在同一信道上同时传输多路信号,提高了线路的利用率。在实际应用中,基带信号适用于短距离传输,而宽带信号则适用于长距离、多路复用的通信场景。

编码与调制

编码与调制是通信领域中两个非常重要的概念,它们各自具有特定的定义和功能。

编码,简单来说,就是将数据转换为特定格式的信号的过程在通信中,编码主要用于将数字或模拟数据转换为数字信号。数字数据编码为数字信号的过程,常见的编码方式包括归零编码(RZ)、非归零编码(NRZ)、曼彻斯特编码以及差分曼彻斯特编码等。每种编码方式都有其特定的优点和适用场景。例如,曼彻斯特编码和差分曼彻斯特编码常用于局域网,它们具有自同步和抗干扰性好的特点。
**另一方面,调制则是指将数据(无论是数字还是模拟数据)转换为模拟信号的过程。**这通常涉及使用载波信号来承载信息。调制可以分为基带调制和带通调制两种类型。基带调制仅对基带信号的波形进行变换,以适应信道特性,其输出仍然是基带信号。而带通调制则使用载波将基带信号的频率迁移到较高频段进行传输,这有助于解决许多传输介质不能传输低频信息的问题,并使信号能够传输得更远。在带通调制中,常用的调制方法包括幅移键控(ASK)、频移键控(FSK)等。
在这里插入图片描述

数字数据编码为数字信号

非归零编码

非归零编码(NRZ,Non-Return to Zero)是数字通信中常用的一种编码方式。在这种编码方式中,每个二进制位都被转换成一个信号电平,高电平通常表示二进制位为1,而低电平表示二进制位为0。这种编码方式在整个码元时间内维持有效电平,即信号保持在相应的电平上,直到下一个二进制位需要被编码。
非归零编码具有编码效率高的优点,因为它直接映射了二进制位到电平信号。然而,这种编码方式也存在一些缺点。例如,当连续传输相同的二进制位时,波形会出现直流分量,这可能导致时钟漂移和误码率增加。此外,非归零编码没有检错功能,且无法判断一个码元的开始和结束,这可能导致收发双方难以保持同步。
在这里插入图片描述

归零编码

归零编码(RZ,Return-to-Zero)是数字通信中的一种编码方式。在这种编码方式中,每一位二进制数据(0或1)都通过特定的电平变化来表示,并且在一个码元(即一个二进制位的时间周期)结束时,信号会返回到零电平或某个基准电平。
归零编码的特性在于每个码元结束后都会有一个归零段,即电平会回到零或某个特定的基准状态。这种编码方式有助于接收方同步时钟信号,因为每个码元的结束都伴随着一个明显的电平变化。归零编码可以是单极性的,也可以是双极性的。在单极性归零编码中,低电平可能表示0,而正电平表示1;在双极性归零编码中,高电平可能表示1,负电平表示0。
归零编码的优点在于其自同步的特性,这使得接收方能够准确地识别每个码元的开始和结束,从而保持与发送方的同步。然而,归零编码的一个主要缺点是它的效率相对较低,因为每个码元都需要在结束时返回到零电平,这占用了额外的带宽和时间。
在这里插入图片描述

反向不归零编码

反向不归零编码(NRZI,Non-Return-to-Zero Inverted)是一种数字通信中的编码方式。与常规的非归零编码(NRZ)不同,NRZI编码中的信号电平变化表示数据0,而信号电平保持不变则表示数据1
在NRZI编码中,每一位二进制数据的状态是通过与前一位数据的电平状态对比来确定的。如果当前位的电平状态与前一位不同,那么就表示一个数据0;如果电平状态与前一位相同,则表示一个数据1。这种编码方式的一个关键特点是它减少了信号中的直流分量,因为长时间的连续相同电平状态在NRZI编码中会被打破。
NRZI编码的一个显著优点是它能够在一定程度上解决同步问题。由于每个数据0都伴随着一个电平变化,接收方可以通过检测这些变化来同步时钟信号。然而,如果数据中连续出现多个1,即信号线保持同一状态持续一段时间,那么接收端可能无法同步时钟信号。为了解决这个问题,NRZI编码会在一定数量的1之后强行插入一个0,即当信号线状态持续一段时间不变时,发送端会强制改变信号线的状态,而接收端则会忽略这个变化
在这里插入图片描述

曼彻斯特编码

曼彻斯特编码(Manchester Encoding),也叫做相位编码(Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。在以太网媒介系统中的应用属于数据通信中的两种位同步方法里的自同步法(另一种是外同步法),即接收方利用包含有同步信号的特殊编码从信号自身提取同步信号来锁定自己的时钟脉冲频率,达到同步目的。
曼彻斯特编码的特点在于每一位(bit)数据的中间有一跳变(类似于方波),位中间的跳变既作时钟信号,又作数据信号。在曼彻斯特编码中,从低电平到高电平的转换表示1,从高电平到低电平的转换表示0。这种编码方式使得曼彻斯特编码具有自同步能力和良好的抗干扰性能。然而,由于每个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2
在这里插入图片描述

差分曼彻斯特编码

差分曼彻斯特编码(Differential Manchester Encoding)是一种特殊的编码方式,主要用于数字通信和数据传输。它是对曼彻斯特编码的一种改进,具有自同步的特点,并且可以有效地减少数据传输中的误差。
差分曼彻斯特编码的规则相对复杂,但逻辑清晰。在每个时钟周期的起始处,如果遇到“0”,则信号电平会发生变化(即跳变);如果遇到“1”,则信号电平保持不变。而在每个时钟周期的中间,都会有一次电平跳变,这个跳变主要用于同步。因此,不论传输的是“0”还是“1”,每个码元的正中间都会有一次电平转换。
差分曼彻斯特编码的主要优点在于其自同步特性。由于每个码元都有固定的跳变模式,接收方可以根据这些跳变来提取时钟信号,从而保持与发送方的同步。此外,差分曼彻斯特编码还具有较强的抗干扰能力,能够在一定程度上减少传输过程中的误码率。
然而,差分曼彻斯特编码也存在一些缺点。首先,由于其编码规则相对复杂,实现起来可能较为困难,需要较高的技术水平。其次,由于每个码元都需要进行跳变,这在一定程度上降低了数据传输的效率。
在这里插入图片描述

4B/5B编码

4B/5B编码是百兆以太网中线路层编码类型之一,其核心思想是将欲发送的数据流每4位作为一个组,然后按照特定的规则将其转换成相应的5位二进制代码。这种编码方式总共可以有32种不同的5位二进制代码组合,但实际上,只有其中的16种被用作数据码,以对应4位的二进制数据;而其余的16种则未用,或用作控制码,以表示帧的开始和结束、光纤线路的状态(如静止、空闲、暂停)等。
4B/5B编码的设计目的是为了保证在整个传输数据信息(不包括控制信息)的过程中,无论是单组编码还是相邻组编码,都不会出现超过3个连续“0”的情况。这种特性有助于解决传输中的同步问题,提高数据传输的可靠性。
在实际应用中,4B/5B编码通常与NRZ-I(非归零反相编码)结合使用。NRZ-I编码是一种线路编码技术,其特点是在没有信号传输时保持线路的电平不变,有信号传输时则根据信号的值改变电平。而4B/5B编码则是在NRZ-I编码的基础上,对数据进行进一步的编码处理,以提高数据传输的效率和可靠性。
总的来说,4B/5B编码是一种高效、可靠的编码方式,特别适用于需要高速、高质量数据传输的场合,如以太网通信等。通过其独特的编码规则,4B/5B编码能够有效地解决数据传输中的同步和误码问题,确保数据的准确、可靠传输。
在这里插入图片描述

数字数据调制为模拟信号

数字数据调制为模拟信号是数字通信中的一个关键过程,它涉及将数字信号转换为模拟信号以便在模拟信道中传输。这个过程通常发生在发送端,对应于调制解调器中的调制部分。

在数字数据调制为模拟信号的过程中,有多种调制技术可以使用,包括幅移键控(ASK)、频移键控(FSK)和相移键控(PSK)。每种调制方式都有其独特的原理和特性:
幅移键控ASK是通过改变载波信号的振幅来表示数字信号0和1的。在ASK中,载波的频率和相位都保持不变,而振幅则根据数字信号的值进行变化。这种调制方式相对容易实现,但抗干扰能力可能较弱。
频移键控FSK则是通过改变载波信号的频率来表示数字信号0和1的。在FSK中,载波的振幅和相位保持不变,而频率则根据数字信号的值进行变化。FSK具有较好的抗干扰能力,因此在实际应用中较为广泛。
相移键控PSK则是通过改变载波信号的相位来表示数字信号0和1的。PSK调制方式可以实现较高的数据传输速率,并且对于相位噪声的抵抗能力也较强。
在这里插入图片描述

除了上述三种基本的调制方式外,还有一些其他的调制技术,如正交振幅调制(QAM)等,它们结合了两种或多种基本调制方式的优点,以实现更高的数据传输效率和更好的性能。

模拟数据编码为数字信号

模拟数据编码为数字信号的过程,是数字通信中的一个核心环节。这个过程通常涉及到采样、量化和编码三个主要步骤,旨在将连续的模拟信号转换为离散的数字信号,以便进行数字处理、传输和存储。

采样是对模拟信号进行周期性扫描,将时间上连续的信号转换为时间上离散的信号。采样定理指出,为了使所有离散信号能够不失真地代表原始模拟信号,采样频率必须满足一定的条件。一般来说,采样频率至少应为模拟信号最高频率的两倍,这被称为奈奎斯特采样定理。
量化是将每个采样点的幅度以某个最小数量单位(称为量化步长)的整数倍来度量。这个过程将模拟信号的幅度转换为有限个数字表示的离散序列。量化过程中会引入量化误差,因此量化步长的选择需要在信号质量和数据量之间进行权衡。
编码是将量化的结果转换为与之对应的二进制编码。这个过程可以将离散序列转换为计算机可以处理的二进制数据。根据具体的编码方案,可以采用不同的编码方法,如PCM(脉冲编码调制)、DPCM(差分脉冲编码调制)、ADPCM(自适应差分脉冲编码调制)等。
在这里插入图片描述

模拟数据调制为模拟信号

模拟数据调制为模拟信号的过程,实际上是模拟信号传输中的一个重要环节。在模拟信号传输过程中,特别是当信道的长度非常长或环境比较恶劣时,模拟信号可能会受到衰减。为了应对这种衰减,保证传输的有效性,通常需要将模拟信号调制成频率更高的信号。
调制的方式有很多种,比如振幅调制(AM)、频率调制(FM)和相位调制(PM)等。在振幅调制中,载波的振幅会随着模拟数据信号的变化而变化;在频率调制中,载波的频率会随着模拟数据信号的变化而变化;而在相位调制中,则是载波的初始相位随着模拟数据信号的变化而变化。
这样的调制过程,实际上是将模拟数据信号加载到载波信号上,形成一个新的模拟信号。这个新的模拟信号具有更高的频率,能够更好地抵抗信道中的衰减和干扰。
接收方在接收到这个调制后的模拟信号后,会通过解调器将信号还原为原来的模拟数据信号。这个过程是调制的逆过程,要求解调器能够准确地还原出原始信号。
在这里插入图片描述

相关文章:

计算机网络——物理层(编码与调制)

计算机网络——编码与调制 基带信号和宽带信号编码与调制数字数据编码为数字信号非归零编码归零编码反向不归零编码曼彻斯特编码差分曼彻斯特编码4B/5B编码 数字数据调制为模拟信号模拟数据编码为数字信号模拟数据调制为模拟信号 我们之前讲了物理层的一些基础知识和两个准则&a…...

PHP魔术方法详解

__construct() 构造函数用于初始化新创建的对象。PHP 5 之后不推荐使用类名作为构造函数。 class Person {public $name;public $age;public function __construct($name, $age) {$this->name $name;$this->age $age;} }$person new Person("Alice", 30);…...

游戏 AI 反作弊|内附解决方案详情!

我们提出使用在游戏中广泛存在的回放日志数据,重构出玩家当局的表现。在回放 日志数据中,我们构建了玩家的时序行为数据,并基于该时序行为数据,分别搭建 了透视和自瞄外挂检测系统,该方法和系统可广泛应用于各种在线…...

elementUI组件库样式修改整理

一、整体修改样式注意点 避免!important,能使用深度选择器就用深度选择器主题色使用变量,方便后期统一修改,最好新建一个单独的文件,专门用于定义公共变量样式文件尽量放在一个文件里,方便后期维护 二、单独element …...

还是了解下吧,大语言模型调研汇总

大语言模型调研汇总 一. Basic Language ModelT5GPT-3LaMDAJurassic-1MT-NLGGopherChinchillaPaLMU-PaLMOPTLLaMABLOOMGLM-130BERNIE 3.0 Titan 二. Instruction-Finetuned Language ModelT0FLANFlan-LMBLOOMZ & mT0GPT-3.5ChatGPTGPT-4AlpacaChatGLMERNIE BotBard 自从Cha…...

Win11初始化系统遇一文解决

这个是目录 一、设置内的初始化无法使用时,使用以下工具二、将桌面移动到D盘三、解决win11桌面右键创建只有一个带盾牌的文件夹问题四、win11 系统停止更新五、office安装1、使用的是 Office Tool plus2、使用WPS 六、D盘有感叹号七、打开组策略编辑器(gpedit.msc)失…...

vr虚拟现实游戏世界介绍|数字文化展览|VR元宇宙文旅

虚拟现实(VR)游戏世界是一种通过虚拟现实技术创建的沉浸式游戏体验,玩家可以穿上VR头显,仿佛置身于游戏中的虚拟世界中。这种技术让玩家能够全方位、身临其境地体验游戏,与游戏中的环境、角色和物体互动。 在虚拟现实游…...

kotlin 程序 编译与执行

准备kotlin环境 Ubuntu安装kotlin 1. 创建一个名为 hello.kt 文件&#xff0c;代码如下&#xff1a; fun main(args: Array<String>) {println("Hello, World!") }2. 使用 Kotlin 编译器编译应用 kotlinc hello.kt -include-runtime -d hello.jar-d: 用来设…...

Python学习:注释和运算符

python 注释 在Python中&#xff0c;注释用于在代码中添加解释、说明或者提醒&#xff0c;但并不会被解释器执行。Python中的注释以#开头&#xff0c;直到行末为止。下面是关于Python注释的详细解释和举例&#xff1a; 单行注释&#xff1a;使用#符号在行的开头添加注释&…...

英伟达 V100、A100/800、H100/800 GPU 对比

近期&#xff0c;不论是国外的 ChatGPT&#xff0c;还是国内诸多的大模型&#xff0c;让 AIGC 的市场一片爆火。而在 AIGC 的种种智能表现背后&#xff0c;均来自于堪称天文数字的算力支持。以 ChatGPT 为例&#xff0c;据微软高管透露&#xff0c;为 ChatGPT 提供算力支持的 A…...

Spark面试重点

文章目录 1.简述hadoop 和 spark 的不同点&#xff08;为什么spark更快&#xff09;2.谈谈你对RDD的理解3.简述spark的shuffle过程4. groupByKey和reduceByKey的区别 1.简述hadoop 和 spark 的不同点&#xff08;为什么spark更快&#xff09; Hadoop 和 Spark 是两种用于大数据…...

UGUI源码分析与研究2-从底层实现的角度去分析和调优UI的性能问题和疑难杂症

从底层实现的角度去分析和调优UI的性能问题和疑难杂症&#xff0c;可以从以下几个方面入手&#xff1a; 绘制性能优化&#xff1a;UI的绘制是一个重要的性能瓶颈&#xff0c;可以通过以下方式进行优化&#xff1a; 减少绘制区域&#xff1a;只绘制可见区域&#xff0c;避免不必…...

OpenAI的GPT已达极限,更看好AI Agent

日前&#xff0c;比尔盖茨发表文章表示&#xff1a;AI Agent不仅会改变人与电脑的互动方式&#xff0c;或许还将颠覆软件行业&#xff0c;引领自输入命令到点击图标以来的最大计算机革命。 在数字化和技术创新的浪潮中&#xff0c;AI Agent作为一种前沿技术&#xff0c;正开启…...

【C/C++】详解 assert() 断言(什么是assert? assert有什么作用?)

目录 一、前言 二、什么是 assert ? 三、assert 的用法 四、assert 案例解析 五、assert 断言的使用原则 六、共勉 一、前言 在编写程序过程中&#xff0c;尤其是调试代码时&#xff0c;往往需要一个提醒代码漏洞/Bug的小助手&#xff0c;以便于程序员及时修改和完善代码…...

[C++]20:unorderedset和unorderedmap结构和封装。

unorderedset和unorderedmap结构和封装 一.哈希表&#xff1a;1.直接定址法&#xff1a;2.闭散列的开放定址法&#xff1a;1.基本结构&#xff1a;2.insert3.find4.erase5.补充&#xff1a;6.pair<k,v> k的数据类型&#xff1a; 3.开散列的拉链法/哈希桶&#xff1a;1.基…...

ARM 汇编指令:(六) B 跳转指令

目录 一.B 和 BL 1.B/BL指令的语法格式 2.示例解析 一.B 和 BL 跳转指令 B 使程序跳转到指定的地址执行程序。指令 BL 将下一条指令的地址复制到 R14&#xff08;即返回地址连接寄存器 LR&#xff09;寄存器中&#xff0c;然后跳转到指定地址运行程序。 1.B/B…...

​​SQLiteC/C++接口详细介绍之sqlite3类(十一)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十&#xff09; 下一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十二&#xff09;&#xff08;未发表&#xff09; 33.sq…...

百度智能云+SpringBoot=AI对话【人工智能】

百度智能云SpringBootAI对话【人工智能】 前言版权推荐百度智能云SpringBootAI对话【人工智能】效果演示登录AI对话 项目结构后端开发pom和propertiessql_table和entitydao和mapperservice和implconfig和utilLoginController和ChatController 前端开发css和jslogin.html和chat.…...

第二十七节 Java 多态

本章主要为大家介绍java多态的概念&#xff0c;以及便于理解的多态简单例子。 Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态性是对象多种表现形式的体现。 比如我们说"宠物"这个对象&#xff0c;它就有很多不同的表达或实现&#xff0c;比…...

基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的员工健康管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...