用C语言写摩斯密码程序,给你一个“码”上破译的快乐!

2025-08-08 17:06:03 密码用途 思思

哎呀,各位编程界的“密码破译大师”们,今天咱们要聊的可是炙手可热的“摩斯密码”!不用担心,不是要你变身成火箭科学家,也不是要你穿越到二战时的密码战场。只要一块儿翻翻C语言的“密码箱”,你就能写出一段酷炫的摩斯密码程序,让你的代码不再平凡,秒变“秘密特工”!那么,话不多说,快上车,带你飞!

## 摩斯密码是什么?为何要用C语言来写程序?

摩斯密码,这个被“暗号界”的大神们津津乐道的“古早货”,它将每个字母和数字用短点(“·”)和长划(“—”)来表示,简直就像是无线电里的“神秘歌谣”。在现代,除了娱乐和学习的趣味玩意儿,摩斯密码还能用来测试你的编码水平,或者在游木这里说的“比拼脑洞”。

而用C语言来写摩斯密码程序,简单得像喝水——编程界的基本款技能,连“Vlook”都知道怎么操作。C语言的高效和灵活,让你可以轻松实现字符的转换、输入输出,甚至还能加入一些趣味互动,比如“猜猜我在说什么?”。

## 搭建摩斯密码的“谜题工厂”

要搞定摩斯密码的编码与解码,咱们得准备个“密码字典”。你可以用数组,也可以用结构体(结构体更“高端”,但容易混淆)。这里,为了代码的简洁优雅,我们选用一个字典数组,把字母和它对应的摩斯码存进去。

```c

#include

#include

// 定义一个结构体来存放字母和对应的摩斯码

struct MorseCode {

char letter; // 字母或数字

const char *code; // 摩斯码字符串

};

```

再来创建一个摩斯码字典:

```c

struct MorseCode morseDictionary[] = {

{'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', "----."}

};

#define DICT_SIZE (sizeof(morseDictionary) / sizeof(morseDictionary[0]))

```

## 字符串匹配,快速“秒懂”摩斯密码

写转码(即英文转摩斯)和解码(摩斯转英文)两个功能,这才叫“牛逼闪闪”。实现细节:遍历每个字符,查字典,然后输出对应的摩斯码(或者反向匹配摩斯码,变英文)。

```c

// 英文字符转摩斯码

void textToMorse(char *text) {

for (int i = 0; i < strlen(text); i++) {

if (text[i] == ' ') {

printf(" / "); // 空格用“/”分隔,便于阅读

continue;

}

int found = 0;

for (int j = 0; j < DICT_SIZE; j++) {

if (toupper(text[i]) == morseDictionary[j].letter) {

printf("%s ", morseDictionary[j].code);

found = 1;

break;

}

}

if (!found) {

printf("? "); // 不认识的字符,给个问号

}

}

printf("\n");

}

```

解码就有点“脑洞大开”,需要将摩斯码串拆成“密码块”,然后匹配字典,最后拼出原文。

```c

// 摩斯码转英文

void morseToText(const char *morse) {

char buffer[10];

int index = 0;

for (int i = 0; i <= strlen(morse); i++) {

if (morse[i] != ' ' && morse[i] != '\0') {

buffer[index++] = morse[i];

} else {

buffer[index] = '\0'; // 关键词:把摩斯码转成字符串

if (strcmp(buffer, "/") == 0) {

printf(" "); // 斜杠代表空格

} else {

// 在字典里找摩斯码对应的字符

int found = 0;

for (int j = 0; j < DICT_SIZE; j++) {

if (strcmp(morseDictionary[j].code, buffer) == 0) {

printf("%c", morseDictionary[j].letter);

found = 1;

break;

}

}

if (!found) {

printf("?"); // 识别不到的码

}

}

index = 0; // 重新开始

}

}

printf("\n");

}

```

## 搭建“互动桥梁”,让人生充满趣味

可以让用户选择操作,是转码还是解码。还可以搞个小彩蛋,比如“猜猜我在用摩斯码暗示你:—— .-.. .-.. —”,哈,那是“HELLO”!

```c

int main() {

printf("欢迎来到摩斯密码黑科技!\n");

printf("请选择操作:\n1. 英文转摩斯\n2. 摩斯转英文\n你的选择:");

int choice;

scanf("%d", &choice);

char input[256];

if (choice == 1) {

printf("请输入要转码的英文:");

getchar(); // 吸收换行

fgets(input, sizeof(input), stdin);

input[strcspn(input, "\n")] = 0; // 去掉换行符

textToMorse(input);

} else if (choice == 2) {

printf("请输入要解码的摩斯(用空格分码,用/代表空格):");

fgets(input, sizeof(input), stdin);

input[strcspn(input, "\n")] = 0;

morseToText(input);

} else {

printf("你个小机灵鬼,认错操作!\n");

}

// 顺便插入广告:玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink

return 0;

}

```

# 拓展空间:让你的程序“秒变功能王”

想让摩斯密码变得更多彩?比如加入声音提示(beep),或者网络交互(比如用Socket实现实时暗号交换),再或者让它支持多语言码表,甚至搞个“解密小游戏”。

那位朋友,你觉得,这个“密码工厂”还能怎么玩?是不是感觉自己马上要变成“神秘代码大师”了?那么,恭喜你,下一次遇到“暗号”,你可以轻松秒懂,手到擒来!

对了,别忘了那个神奇网站:bbs.77.ink,里面有许多“神秘宝藏”等你发现!