首先,摩斯密码是先需要创建的。所以,就有了摩斯密码创建程序。这个程序其实很简单,只需要通过循环枚举就行了。代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x=0;
while(1)
{
for(int i=0;i<=1;i++)
for(int i2=0;i2<=1;i2++)
for(int i3=0;i3<=1;i3++)
for(int i4=0;i4<=1;i4++)
for(int i5=0;i5<=1;i5++)
for(int i6=0;i6<=1;i6++)
{
x++;
if(i==1)
cout<<"-";
else
cout<<".";
if(i2==1)
cout<<"-";
else
cout<<".";
if(i3==1)
cout<<"-";
else
cout<<".";
if(i4==1)
cout<<"-";
else
cout<<".";
if(i5==1)
cout<<"-";
else
cout<<".";
if(i6==1)
cout<<"-";
else
cout<<".";
if(x>40)
return 0;
cout<<",";
}
}
return 0;
}
运行起来是这样:
接下来就是代码环节:
第一步:将刚才生成的摩斯密码复制到一个字符串内:
第二步:做好界面
第三步:加密
第四步:处理特殊字符
第五步:复制
第六步:解密
第七步:处理特殊字符
完整代码如下:
#include<bits/stdc++.h>
#include<iostream>
#include<windows.h>
#include<cmath>
#include<conio.h>
#include<cstring>
using namespace std;
int main()
{
string a="......,.....-,....-.,....--,...-..,...-.-,...--.,...---,..-...,..-..-,..-.-.,..-.--,..--..,..--.-,..---.,..----,.-....,.-...-,.-..-.,.-..--,.-.-..,.-.-.-,.-.--.,.-.---,.--...,.--..-,.--.-.,.--.--,.---..,.---.-,.----.,.-----,-.....,-....-,-...-.,-...--,-..-..,-..-.-,-..--.,-..---";
string txt,l;
char choice;
while(1)
{
system("cls");
cout<<"****************************************************"<<endl;
cout<<"生成加密英文请输入1 翻译加密摩斯密码请输入2(切记切换成英文输入法输入) "<<endl;
cout<<"****************************************************"<<endl;
cout<<"请输入你的选择:";
choice=getch();
choice-=48;
if(choice==1)
{
cout<<"加密英文"<<endl;
cout<<"请输入你要加密的英文:"<<endl;
getline(cin,txt);
system("cls");
l="";
for(int i=0;i<txt.size();i++)
{
if(txt[i]==' ')
l+="-..-..";
if(txt[i]=='.')
l+="-..-.-";
if(txt[i]=='!')
l+="-..--.";
if(txt[i]=='?')
l+="-..---";
if(txt[i]>='a'&& txt[i]<='z')
{
int q=txt[i]-87;
for(int j=0;j<6;j++)
l+=a[q*7+j];
}
if(txt[i]>='0'&&txt[i]<='9')
{
int q=txt[i]-48;
for(int j=0;j<6;j++)
l+=a[q*7+j];
}
}
cout<<l;
keybd_event(VK_CONTROL,0,0,0);
keybd_event(65,0,0,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,0,0);
keybd_event(67,0,0,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
keybd_event(67,0,KEYEVENTF_KEYUP,0);
cout<<endl;
cout<<"已经将加密后的英文复制到剪切板"<<endl;
system("pause");
}
if(choice==2)
{
cout<<"解密摩斯密码"<<endl;
cout<<"请输入你要解密的摩斯密码:"<<endl;
getline(cin,txt);
system("cls");
l="";
for(int i=0;i<txt.size();i+=6)
{
string x="";
for(int j=0;j<6;j++)
x+=txt[i+j];
int m=a.find(x);
if(m==-1)
continue;
m-=m/7;
if(m/6==37)
{
l+=" ";
continue;
}
if(m/6==38)
{
l+=".";
continue;
}
if(m/6==39)
{
l+="!";
continue;
}
if(m/6==40)
{
l+="?";
continue;
}
if(m/6<10)
{
char o=m/6+48;
l+=o;
continue;
}
char k=m/6+87;
l+=k;
}
cout<<"解密后的摩斯密码为:";
for(int k=0;k<l.size();k++)
{
if(l[k]=='{')
cout<<" ";
else
cout<<l[k];
}
system("pause");
}
}
return 0;
}