I LOVE YOU TOO密码解析

一男生向心仪女生告白后收到一段五层加密的摩斯密码,求助网友最终解密成功,密码内容为“ILOVEYOUTOO”。本文详细记录了密码的解密过程。

前几天看到网上一篇文章,讲一个男生向心仪的女生告白,女生给出了一段摩斯密码,在无数好心人的帮助下,最后解出了密码。出于好奇,我去了贴吧,找到了原来的贴子:

HighnessC 写道
求救,我已经快想爆了。

最近和一个心仪的女生告白,
谁知道她给了一个摩斯密码给我,说解出来了才答应和我约会。
可是我用尽了所有方法都解不开这个密码。。好郁闷阿。只能求教你们了。

****-/*----/----*/****-/****-/*----/---**/*----/****-/*----/-****/***--/****-/*----/----*/**---/-****/**---/**---/***--/--***/****-/

她唯一给我的提示就是这个是5层加密的密码..
也就是说要破解5层密码才是答案..
好郁闷阿..
救救我吧..

我本人不懂摩斯密码,当然,也不懂怎么解码,不过还是看了网上的密码解析,原来这段密文的意思是“I LOVE YOU TOO”,恭喜下他们~看了很多网上很多相关的文章,发现大家对解密过程中的有些步骤还不是很了解,或者说是解密的文章中没有说清楚,所以这里整理一下整个解密过程(只是整理 ,不是我想出来的):

1、参考摩斯密码对照表,得到对应数字组合4194418141634192622374

2、数字分组41 94 41 81 41 63 41 92 62 23 74,发现个位数总是1~4 ,有人提示手机键盘,41对应数字键4的第一个字母,类推后得到G Z G T G O G X N C S

3、根据女生的提示——她说途中有一个步骤是"替代密码"而密码表则是我们人类每天都可能用到的东西,这里强人想到了键盘,标准键盘为世界所公认,“码表 QWE=ABC依次类推”(这句话让很多人搞不清楚,导致推不出答案)。其实就是从键盘字母左上角开始,从左向右,从上到下进行对照,下面给出具体的对应关系

qwe=abc

rty=def

uiop=ghij

asd=klm

fgh=nop

jkl=qrs

zxc=tuv

vbnm=wxyz

根据这个对应关系,得到O T O E O I O U Y V L

4、至此,差不多可以猜到答案了,将字母分成两排

OTOEOI

OUYVL

得到OOT UOY EVOL I

5、倒序一下得到I LOVE YOU TOO

 

至此,答案就出来了!发现破解密码还是挺有意思的,当然,前提是破出来了,破不出来那感觉就不怎么样了,就像HighnessC刚开始那样。作为开发者,除了写程序偶尔也该换点花样搞搞脑子,呵呵~

 

P.S.我写完这篇文章时,那个贴子已经2000楼了,再次祝福一下他们。

C语言的注释分为两种,第一种:在一行源代码中“//”后的内容为注释内容。第二种:“/*”与“*/”之间的内容为注释内容。第三种:程序中只出现了“/*”,没有“*/”与之对应,那么将“/*”后的全部内容都要过滤掉。注意,只要是注释内容,那么注释内容中的字符应该全部忽略,即不起任何的作用。例如“/*”与“*/”之间如果再有“//”,那么“//”不应起作用;如果“//”再有“/*”,那么“/*”也不应起作用。 你的任务是先打开一个名字为dict.dic的文本文件,该文件中前5行每行为1个整数,从第6行开始为5段C语言的源代码。那5个数字代表这5段源代码结束的行数,比如如果第一行的整数为20,第二行的整数为60,则表示从第6行到第20为第一段代码,从第21行到第60为第二段代码。然后根据输入要求将源代码中所有注释过滤掉。 在本过滤注释系统中,你可以忽略源文件中双引号导致“//”、“/*”、“*/”失去作用的情况,即只要“//”、“/*”、“*/”不是注释内容,在任何情况下都起作用。 输入 只可能是1,2,3,4,5之一 输出 输入为1则输出第一段代码过滤后的结果,输入为2则输出第二段代码过滤后的结果,依此类推。 样例输入 Copy 1 样例输出 Copy 如果第一段代码是这样: /* @Author: BUPT @Date: 2010 8 26 */ #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; //I just want to test '/' printf("I love programming C.\n") ; //"printf" is a useful function /* printf("I hope you love it too!\n") ; /* //C is not always hard , if you love it , it will not treat you rough. */ return 0 ; } 则输出是这样: #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; printf("I love programming C.\n") ; printf("I hope you love it too!\n") ; return 0 ; }
05-12
<think>我们注意到用户想要修改C语言代码,使用switch语句来处理字符串(如'love', 'hate', 'like')并输出相应的情感回应。 但是,在C语言中,switch语句只能用于整型或枚举类型,不能直接用于字符串。因此,我们需要将字符串转换为可switch的类型,比如使用枚举或哈希值。 这里提供两种方法: 方法1:使用if-else链(但用户要求用switch,所以不采用) 方法2:将字符串映射为整数,然后使用switch。 我们可以为每个字符串设计一个哈希函数,将字符串转换为整数,然后switch这个整数。但是要注意哈希冲突。 另一种更简单的方法是:使用strcmp函数比较字符串,然后根据比较结果设置一个整型变量作为switch的条件。但是这样仍然需要多个if-else来判断字符串,然后再用switch,显得多此一举。 因此,我们考虑使用一种常见的技巧:将字符串哈希成一个整数(比如使用简单的哈希函数,然后处理可能的冲突)或者使用预定义的枚举。 步骤: 1. 定义一个枚举类型,将每个字符串映射为一个整数常量。 2. 写一个函数,输入字符串,返回对应的枚举值(通过if-else比较字符串,返回枚举常量)。 3. 然后使用switch处理这个枚举值。 虽然switch之前还是用了if-else,但是我们将字符串比较封装在一个函数中,这样主逻辑的switch看起来清晰。 但是,用户明确要求使用switch语句来处理字符串,所以我们需要在switch中处理字符串,这是不可能的。因此,我们必须将字符串转换为整数。 这里我们采用一种简单的方法:使用一个函数将字符串映射为整数(通过比较字符串,返回一个代表不同字符串的整数),然后switch这个整数。 具体实现: 定义枚举: enum Emotion {LOVE, HATE, LIKE, UNKNOWN}; 写一个函数:enum Emotion get_emotion_code(const char *str); 然后在主函数中: enum emotion_code = get_emotion_code(input_string); switch(emotion_code) { case LOVE: ... break; case HATE: ... break; case LIKE: ... break; default: ... break; } 这样,我们就用switch处理了字符串的“情况”。 下面我们写一个示例代码: 注意:用户没有提供原始代码,所以我们从头写一个。 假设程序要求用户输入一个字符串,然后输出相应的情感回应。</think>以下是一个使用 `switch` 语句处理字符串情感输入的 C 语言实现方案。虽然 C 语言的 `switch` 不支持直接处理字符串,但我们可以通过将字符串映射为枚举值来实现类似功能: ```c #include <stdio.h> #include <string.h> // 定义情感枚举类型 typedef enum { LOVE, HATE, LIKE, UNKNOWN } Emotion; // 将字符串映射为枚举值 Emotion get_emotion_code(const char* str) { if (strcmp(str, "love") == 0) return LOVE; if (strcmp(str, "hate") == 0) return HATE; if (strcmp(str, "like") == 0) return LIKE; return UNKNOWN; } int main() { char input[20]; printf("Enter your emotion: "); scanf("%s", input); // 获取情感编码 Emotion emotion = get_emotion_code(input); // 使用switch处理情感响应 switch(emotion) { case LOVE: printf("❤️ Love makes the world go round!\n"); break; case HATE: printf("😠 Hate is a strong emotion, let's talk it out.\n"); break; case LIKE: printf("👍 I like that too! What else do you enjoy?\n"); break; default: printf("🤔 I'm not sure how to respond to '%s'.\n", input); break; } return 0; } ``` ### 关键实现说明: 1. **枚举映射** 通过 `get_emotion_code()` 函数将字符串转换为枚举值,这是实现 `switch` 处理字符串的关键技术[^2] 2. **字符串比较** 使用 `strcmp()` 进行精确字符串匹配(区分大小写) 3. **扩展性** 只需在枚举和映射函数中添加新条目即可支持更多情感类型 ### 使用示例: ```shell $ gcc emotion.c -o emotion $ ./emotion Enter your emotion: love ❤️ Love makes the world go round! $ ./emotion Enter your emotion: hate 😠 Hate is a strong emotion, let's talk it out. ``` ### 改进建议: 1. 添加大小写不敏感处理: ```c #include <ctype.h> // 在比较前转换为小写 void to_lower(char* str) { for (int i = 0; str[i]; i++) { str[i] = tolower(str[i]); } } ``` 2. 支持词组匹配(如 "I love"): ```c if (strstr(input, "love") != NULL) return LOVE; ``` 3. 添加更多情感类型: ```c typedef enum { LOVE, HATE, LIKE, JOY, // 新增 ANGER, // 新增 UNKNOWN } Emotion; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值