C# 实现 摩尔斯电码

        摩尔斯电码(Morse code)是一种用于传输信息的编码系统。它由美国发明家塞缪尔·摩尔斯(Samuel Morse)于1830年代发明并推广。摩尔斯电码是一种通过发送和接收短暂的电信号或光信号来表达字母、数字和标点符号的国际通信方式。

        摩尔斯电码使用两种基本类型的信号:点(.)和划(-)。这些信号在时间上的变化反映了字母和数字之间的不同组合方式。每个字符由一系列点和划的序列组成,并用间隔来区分不同的字符。摩尔斯电码表达了所有的拉丁字母、阿拉伯数字和常见的标点符号。

        摩尔斯电码在历史上被广泛用于电报通信,特别是在航海、军事和应急通信中。尽管在现代通信中已经被更高效的数字编码所取代,但摩尔斯电码仍然广泛应用于无线电通信、国际SOS紧急信号和业余无线电爱好者之间的交流。

以下是一些摩尔斯电码的应用场景:

  1. 电报通信:在早期的电报通信中,摩尔斯电码被用于传输字母、数字和标点符号。通过电键或手动控制电路,将摩尔斯电码对应的信号发送出去。

  2. 灯光通信:在军事和紧急求救等场合,摩尔斯电码被用于通过灯光信号传递信息。使用闪电灯、手电筒或其他光源,通过打开和关闭灯光来表达摩尔斯电码。

  3. 无线电通信:摩尔斯电码是早期无线电通信的常用编码系统。在电报机或电码器上输入摩尔斯电码,然后通过无线电信号进行发送和接收。这在航海、航空和军事通信中被广泛应用。

  4. 电子邮件和短信:在电子邮件和短信中,摩尔斯电码可以用作紧急信号的一种形式。例如,在SOS信号中,摩尔斯电码的三个短信号表示字母"S",而三个长信号表示字母"O"。

  5. 救援和求救:摩尔斯电码被广泛应用于求救和救援场景中。例如在山地探险或海上航行中遇到困境时,可以使用摩尔斯电码发送求救信号,以便被接收者收到并识别。

        总的来说,摩尔斯电码的简洁性和易于识别性使其成为一种广泛应用于各种通信领域的编码系统。

以下是使用C#实现摩尔斯电码编码和解码的示例代码:

using System;
using System.Collections.Generic;

class MorseCode
{
    private static Dictionary<char, string> charToMorse = new Dictionary<char, string>()
    {
        {'A', ".-"}, {'B', "-..."}, {'C', "-.-."}, {'D', "-.."}, {'E', "."},
        {'F', "..-."}, {'G', "--."}, {'H', "...."}, {'I', ".."}, {'J', ".---"},
        {'K', "-.-"}, {'L', ".-.."}, {'M', "--"}, {'N', "-."}, {'O', "---"},
        {'P', ".--."}, {'Q', "--.-"}, {'R', ".-."}, {'S', "..."}, {'T', "-"},
        {'U', "..-"}, {'V', "...-"}, {'W', ".--"}, {'X', "-..-"}, {'Y', "-.--"},
        {'Z', "--.."}, {'0', "-----"}, {'1', ".----"}, {'2', "..---"}, {'3', "...--"},
        {'4', "....-"}, {'5', "....."}, {'6', "-...."}, {'7', "--..."}, {'8', "---.."},
        {'9', "----."}
    };

    private static Dictionary<string, char> morseToChar = new Dictionary<string, char>();

    static void Main(string[] args)
    {
        // 构建反向字典
        foreach (KeyValuePair<char, string> pair in charToMorse)
        {
            morseToChar[pair.Value] = pair.Key;
        }

        string text = "HELLO WORLD";
        string encoded = Encode(text.ToUpper());
        Console.WriteLine($"摩尔斯电码编码结果:{encoded}");

        string decoded = Decode(encoded);
        Console.WriteLine($"摩尔斯电码解码结果:{decoded}");
    }

    static string Encode(string text)
    {
        string encoded = "";
        foreach (char c in text)
        {
            if (charToMorse.ContainsKey(c))
            {
                encoded += charToMorse[c] + " ";
            }
            else
            {
                encoded += " ";
            }
        }
        return encoded.Trim(); // 移除末尾的空格
    }

    static string Decode(string morseCode)
    {
        string[] words = morseCode.Split(' ');
        string decoded = "";
        foreach (string word in words)
        {
            string[] letters = word.Split(' ');
            foreach (string letter in letters)
            {
                if (morseToChar.ContainsKey(letter))
                {
                    decoded += morseToChar[letter];
                }
            }
            decoded += " ";
        }
        return decoded.Trim(); // 移除末尾的空格
    }
}
        该示例代码将给定的文本进行摩尔斯电码编码和解码,然后输出编码结果和解码结果。请注意,字母间用空格分隔,单词间用两个空格分隔。

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

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

相关文章

现在的小年轻真的卷得过分了,真是完全不把自己当人啊

现在的小年轻真的卷得过分了&#xff0c;真是完全不把自己当人啊 都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才…

常用电子器件学习——MOS管

MOS管介绍 MOS&#xff0c;是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管&#xff0c;简称金氧半场效晶体管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET&#xff09;。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…

力扣670-最大交换

最大交换 题目链接 class Solution { public:int maximumSwap(int num) {string sto_string(num);//转成字符串for(int i0;i<s.size();i)//选择排序模板{int posi;for(int js.size()-1;j>i;--j)//内层循环从后往前if(s[pos]<s[j])posj;if(pos!i)//如果最大的不是i&a…

unity 相机截图

/// <summary> /// 针对相机的截图 /// </summary> public void CameraScreenShot(){ Rect rect new Rect(0,0,Screen.width,Screen.height); RenderTexture renderTexture RenderTexture.GetTemporary((int)rect.width,(int)rect.height,0, RenderTextureFormat…

RabbitMQ消息应答与发布

消息应答 RabbitMQ一旦向消费者发送了一个消息,便立即将该消息,标记为删除. 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个很长的任务并仅仅执行了一半就突然挂掉了,在这种情况下,我们将丢失正在处理的消息,后续给消费者发送的消息也就无法接收到了. 为了…

蓝桥杯官网填空题(骰子迷题)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明参加了少年宫的一项趣味活动&#xff1a;每个小朋友发给一个空白的骰子&#xff08;它的 6 个面是空白的&#xff0c;没有数字&#xff09;&#xff0c;要小朋…

OpenHarmony驱动消息机制管理

驱动消息机制管理 当用户态应用和内核态驱动需要交互时&#xff0c;可以使用HDF框架的消息机制来实现。 消息机制的功能主要有以下两种&#xff1a; 用户态应用发送消息到驱动。 用户态应用接收驱动主动上报事件。 配置管理 HCS&#xff08;HDF Configuration Source&…

JVM—垃圾回收

什么是垃圾 一个没有被任何引用的对象就是一个垃圾对象, 垃圾对象需要被清理回收,否则一直占用内存空间, 其他新对象无法使用垃圾对象空间, 严重的话会造成内存溢出 早期的垃圾回收&#xff1a; 早期例如c/c是需要程序员手动在程序对不再使用的对象进行删除释放. 给程序…

深入分析 Linux 网络丢包问题

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330 所谓丢包&#xff0c;是指在网络数据的收发过程中&#xff0c;由于种种原因&#xff0c;数据包还没传输到应用程序中&#xff0c;就被丢弃了。这些被丢弃包的数量&#…

C语言初学9:数组

一、数组初始化和访问元素 1. 数组声明语句 type arrayName [ arraySize ]; double balance[5]; /* 声明一个长度为5的数组 */ 2. 数组初始化语句 double balance[5] {1000.0, 2.0, 3.4, 7.0, 50.0}; /*或者 double balance[] {1000.0, 2.0, 3.4, 7.0, 50.0};*/ …

C++进阶:多态(下)

1、多态的原理 多态之所以可以实现&#xff0c;主要是因为虚函数表的存在&#xff0c;虚函数表用于记录虚函数的地址&#xff0c;他是一个函数指针数组&#xff0c;在类中用一个函数指针数组指针来指向数组&#xff0c;子类继承了父类的虚函数表&#xff0c;当有重写的情况发生…

基于SAM的视频标注

在本文中&#xff0c;我们将演示基础模型的应用&#xff0c;例如 Meta 的 Segment Anything 和 YOLOv8&#xff0c;以自动检测、分类和绘制视频中感兴趣对象的蒙版。这是之前指南的后续&#xff1a;使用 Meta 的 Segment Anything 和 YOLOv8 自动分类掩码。在本指南中&#xff…

【RabbitMQ】快速入门及基本使用

一、引言 1、、消息队列 Ⅰ、什么是消息队列&#xff1f; 消息队列是一种进程间通信或同一进程的不同线程间的通信方式&#xff0c;软件的贮列用来处理一系列的输入&#xff0c;通常是来自用户。消息队列提供了异步的通信协议&#xff0c;每一个贮列中的纪录包含详细说明的数据…

PySimpleGUI:让spin支持循环

需求 自己用PySimpleGUI写了个小工具&#xff0c;但是发现它的spin不支持循环。 Tkinter本身的Spinbox有wrap这个开关可以觉得是否支持循环&#xff0c;但是没看到PySimpleGUI也支持这个特性。 代码实现 所谓spin的循环&#xff0c;是指当值变换到最大最小值时&#xff0c;可…

移动开发行业——鸿蒙OS NEXT开出繁花

1月18日&#xff0c;华为宣布HarmonyOS NEXT开发者预览版开放申请&#xff0c;根据官方注解&#xff0c;这个版本的鸿蒙系统有个更通俗易懂的名字——“星河版”&#xff0c;也被称为“纯血”鸿蒙。 根据官方解释&#xff0c;之所以取名星河版&#xff0c;寓意鸿蒙OS NEXT就像…

Screen 简介

目录 1. screen 简介2. screen 基本命令 1. screen 简介 screen 是一个在 Unix 和类 Unix 系统上的 终端复用 工具。它允许用户在单个终端窗口中运行多个终端会话&#xff0c;并提供了一些其他功能&#xff0c;如会话断开后的恢复和远程连接的分离。以下是 screen 的一些主要特…

hyperf 和 laravel、lumen防止xss攻击中间件封装

hyperf 防止xss攻击自定义中间件封装 <?phpdeclare(strict_types1);namespace App\Middleware;use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Message\ServerRequestInterface;…

【C语言】扫雷游戏完整代码实现

目录 1.game.h 2.game.c 3.progress.c 4.运行结果 1.game.h #define _CRT_SECURE_NO_WARNINGS#include <string.h> #include <stdio.h> #include <time.h> #include<stdlib.h>#define ROW 9 #define COL 9 #define ROWS 11 #define COLS 11 #defin…

SpringBoot 中配置处理

1、简介 本文介绍一些 springboot 配置管理相关的内容&#xff0c;如何自定义配置&#xff0c;导入配置&#xff0c;配置绑定和基于 profiles 的配置。 2、springboot 配置管理 2.1、自定义配置类 在 spring 中使用 Configuration 注解定义配置类&#xff0c;在 springboot 中…

904. 虫洞(spfa判断负环模板题)

904. 虫洞 - AcWing题库 农夫约翰在巡视他的众多农场时&#xff0c;发现了很多令人惊叹的虫洞。 虫洞非常奇特&#xff0c;它可以看作是一条 单向 路径&#xff0c;通过它可以使你回到过去的某个时刻&#xff08;相对于你进入虫洞之前&#xff09;。 农夫约翰的每个农场中包…