C语言摩斯密码翻译器:从零开始开启你的代码冒险之旅

2025-07-22 6:10:21 密码用途 思思

哎呦喂,小伙伴们,今天给你们带来一场脑洞大开的“魔术秀”,不用变魔术,也不用手持魔杖,只用咱们的“C语言”+“摩斯密码”,让文字变魔术!这不,咱们要做的,就是一个“摩斯密码翻译器”——把摩斯密码翻译成普通英语,或者反过来,让机器帮我们破解那一段段像密语一样的点点划划。是不是很带感?跟紧我,咱们踏上这段代码燃烧之旅!

别小看了这个摩斯密码啊,它可是早在无线电通讯和战场中的重要“秘密武器”。无论是“咻咻咻”的无线电波,还是藏在暗号里的秘密,摩斯密码都能帮你顺利拆解。现在,咱们用C语言,把这个神奇的密码变成可以“翻译”的神器,就像哈利波特有了魔杖一样。

**你是不是也在疑问:怎么写出一个“摩斯密码翻译器”?别急,咱们一步步来破解!**

---

## 你需要知道的摩斯密码基础

先来个速成班:摩斯密码由点(·)和划(-)组成,例如,字母A是·-,字母B是-···,数字1是·----,数字0是————。这就像一串密码表,只要背下来或者用字典查一查,就可以搞定。

这里,给你拿个“摩斯字典”——超级实用,操作简单:

```c

typedef struct {

char letter;

char *morse;

} MorseCode;

```

用个数组,把字母对应的摩斯密码存着。比如:

```c

MorseCode morseTable[] = {

{'A', ".-"},

{'B', "-..."},

{'C', "-.-."},

//...继续加

};

```

记得,数字、符号都在里面,不然大家都怨声载道“这密码不能翻译啊”。

---

## 编写“摩斯密码-文字转换”的核心逻辑

咱们的翻译器分两大功能:一是“摩斯转文字”,二是“文字转摩斯”。简单点来说,就是反过来或者往前走。

1. **摩斯转文字:**读取输入的摩斯码序列(就是点滴划划的串),根据字典映射,把它变成对应的字母或数字。

2. **文字转摩斯:**反之,把字母变成摩斯码,用空格或者斜杠作为分隔符。

你想哟:点点点,点点点,点点点,斜杠,代表不同的文字,别担心,程序会帮你搞定。

---

## C语言实现“摩斯密码翻译器”的详细代码

### 完整代码示范(为了方便你复制粘贴,贴心建议自己写一份)

```c

#include

#include

#include

typedef struct {

char letter;

const char *morse;

} MorseCode;

MorseCode morseTable[] = {

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

};

const int MORSE_TABLE_SIZE = sizeof(morseTable) / sizeof(MorseCode);

// 获取字母对应的摩斯码

const char* getMorse(const char letter) {

for (int i = 0; i < MORSE_TABLE_SIZE; ++i) {

if (morseTable[i].letter == letter)

return morseTable[i].morse;

}

return NULL;

}

// 通过摩斯码找对应的字母

char getLetter(const char *morse) {

for (int i = 0; i < MORSE_TABLE_SIZE; ++i) {

if (strcmp(morseTable[i].morse, morse) == 0)

return morseTable[i].letter;

}

return '#'; // 找不到,返回#

}

void textToMorse(const char *text) {

printf("转换为摩斯密码:\n");

while (*text) {

if (*text == ' ') {

printf(" / ");

} else {

const char *morse = getMorse(*text);

if (morse)

printf("%s ", morse);

else

printf("? ");

}

++text;

}

printf("\n");

}

void morseToText(const char *morseStr) {

printf("翻译为文字:\n");

char buffer[10];

int bufIdx = 0;

while (*morseStr) {

if (*morseStr == '.' || *morseStr == '-') {

buffer[bufIdx++] = *morseStr;

} else if (*morseStr == ' ' || *morseStr == '/') || *(morseStr + 1) == '\0') {

// 遇到空格或斜杠或者结尾,代表一个字符结束

buffer[bufIdx] = '\0';

if (bufIdx > 0) {

printf("%c", getLetter(buffer));

bufIdx = 0;

}

if (*morseStr == '/') {

printf(" ");

}

}

++morseStr;

}

printf("\n");

}

int main() {

printf("欢迎来到C语言摩斯密码翻译器!\n");

printf("请选择模式:\n1.文字转摩斯\n2.摩斯转文字\n你的选择:");

int choice;

scanf("%d", &choice);

getchar(); // 吸收换行

if(choice == 1) {

char text[100];

printf("请输入要转换的文字(大写字母、数字,空格用空格键):\n");

fgets(text, sizeof(text), stdin);

// 去除换行

size_t len = strlen(text);

if (len > 0 && text[len-1] == '\n') {

text[len-1] = '\0';

}

textToMorse(text);

} else if(choice == 2) {

char morseInput[500];

printf("请输入摩斯密码(用空格隔每个字符,用'/'隔单词):\n");

fgets(morseInput, sizeof(morseInput), stdin);

// 去除换行

size_t len = strlen(morseInput);

if (len > 0 && morseInput[len-1] == '\n') {

morseInput[len-1] = '\0';

}

morseToText(morseInput);

} else {

printf("神操作?没这个选项。\n");

}

printf("玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink\n");

return 0;

}

```

---

## 代码亮点抢先看

- 利用结构体简洁存储字母和摩斯码的对应关系,这样查找方便又直观。

- 以数组形式存储摩斯密码,便于扩展,不怕想加入特殊符号或者额外字符。

- 支持数字、字母,未来还可以加支持符号(比如逗号、句号),搞个“扩展包”。

## 实际应用场景大揭秘

- 密码游戏,那点点划划就是你的秘密武器。

- 小学科学课,摩斯密码大作战,寓教于乐。

- 业余无线电爱好者的福音,无线电解密不用愁。

- 自己写点趣味APP,让朋友都哑口无言,嗨翻全场。

想用C语言写点啥?摩斯密码翻译器随时可以陪你“玩一玩”。 快乐编程,乐趣无极限!

你瞧,这不就变成了一个“密码侦探”的神器吗?是不是特别带感?学会这几招,下次遇到密语快快破解,还能炫耀一波。对了,想不想试试火车头一样的代码速度?哈哈,别忘了,玩的同时别忘了访问bbs.77.ink,赚点零花钱不是梦!