📄 playfair.cpp
字号:
#include <iostream.h>
#include <string.h>
void main()
{
char text[200],key[50],matrix[5][5],code[200],ch,a,b,c,d;
char abc[27]="abcdefghijklmnopqrstuvwxyz";
int l1,l2,i,j,k,n,p1=1,p2=1,p3,s,t,u,v;
cout<<"Please input the clear text (with lowercase letters):"<<endl;
cin>>text;
cout<<"Please input the cryptographic key (with lowercase letters):"<<endl;
cin>>key;
l1=strlen(text);
l2=strlen(key);
for (i=l2;i<l2+26;i++)
key[i]=abc[i-l2];
l2=l2+26;
for (i=0;i<l1&&p1!=0;i++)
if (int(text[i])-97<0 ||int(text[i])-97>25)
p1=0;
for (i=0;i<l2-26&&p1!=0;i++)
{
if (int(key[i])-97<0||int(key[i])-97>25)
p1=0;
if (key[i]=='j')
p2=0;
}
if (p2==0)
{
for (i=0;i<l2;i++)
if (key[i]=='i')
key[i]='j';
}
else
{
for (i=0;i<l2;i++)
if (key[i]=='j')
key[i]='i';
}
if (p1==0)
cout<<"Error!"<<endl;
else
{
matrix[0][0]=key[0];
n=1;
for (i=1;i<l2&&n<25;i++)
{
ch=key[i];
p3=1;
for (j=0;j<n/5;j++)
for (k=0;k<5;k++)
if (ch==matrix[j][k])
p3=0;
for (j=n/5;j<n/5+1;j++)
for (k=0;k<n%5;k++)
if (ch==matrix[j][k])
p3=0;
if (p3!=0)
{
matrix[n/5][n%5]=ch;
n++;
}
}
cout<<"The matrix is:"<<endl;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
cout<<matrix[i][j]<<" ";
cout<<endl;
}
cout<<"The cryptograph is:"<<endl;
for (i=0;i<l1;i++)
{
a=text[i];
if (i+1==l1)
b='q';
else
{
if (text[i+1]!=a)
{
b=text[i+1];
i++;
}
else
text[i+1]='q';
}
for (j=0;j<5;j++)
for (k=0;k<5;k++)
{
if (a==matrix[j][k])
{
s=j;
t=k;
}
if (b==matrix[j][k])
{
u=j;
v=k;
}
}
if (s==u)
{
c=matrix[s][(t+1)%5];
d=matrix[u][(v+1)%5];
}
else
{
if (t==v)
{
c=matrix[(s+1)%5][t];
d=matrix[(u+1)%5][v];
}
else
{
c=matrix[s][v];
d=matrix[u][t];
}
}
cout<<c<<d;
}
cout<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -