📄 juzhenchange.cpp
字号:
// Juzhenchange.cpp: implementation of the CJuzhenchange class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "矩阵换位法.h"
#include "Juzhenchange.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CJuzhenchange::CJuzhenchange()
{
int i; int j;
for(i=0;i<50;i++)
for(j=0;j<50;j++)
before[i][j]=after[i][j]=' ';
for(i=0;i<50;i++)
{
f[i]=0;
}
}
CJuzhenchange::~CJuzhenchange()
{
}
void CJuzhenchange::change()
{
keytof();//将输入的矩阵字符串转换成矩阵
if(mode==0)//加密
{
if(hangshu*lieshu<mingwen.GetLength())
{
result="加密失败!原因:矩阵大小不够";
return;
}
encrypt();
}
else//解密
{
if(hangshu*lieshu<mingwen.GetLength())
{
result="加密失败!原因:矩阵大小不够";
return;
}
decrypt();
}
}
void CJuzhenchange::encrypt()
{
tojuzhen(mingwen);//将字符串影射到before矩阵上
exchange();//before->after
toresult();//从after矩阵转化为result字符串
}
void CJuzhenchange::decrypt()
{
tojuzhen(miwen);//将字符串影射到before矩阵上
exchange();//before->after
toresult();//从after矩阵转化为result字符串
}
void CJuzhenchange::tojuzhen(CString m)//将字符串影射到before矩阵上
{
int i; int j; int k=0;
for(i=0;i<hangshu&&k<m.GetLength();i++)
for(j=0;j<lieshu&&k<m.GetLength();j++)
{
before[i][j]=m.GetAt(k);
k++;
}
}
void CJuzhenchange::keytof()
{
int i,j,k; CString l;
i=j=k=0;
while(j<key.GetLength())
{
if(key.GetAt(j)==' '||j==key.GetLength()-1)//字符串下一位为空格,即当前分串为一输入项
{
f[i]=atoi(sum(k,j+1));
k=j+1;//将当前位置作为下一输入项的起始位
j++;
i++;
}
else///字符串不为空格
{
j++;
}
}
for(k=0;k<i;k++)//为方便输入,使输入从1记而非0
{
f[k]--;
}
}
CString CJuzhenchange::sum(int i, int j)//i~j-1合并
{
int k; CString s="";
for(k=i;k<j;k++)
s=s+key.GetAt(k);
return s;
}
void CJuzhenchange::exchange()//before矩阵到after矩阵的转化
{
int i; int j;
if(mode==0)//加密
{
for(j=0;j<lieshu;j++)//换列
for(i=0;i<hangshu;i++)
after[i][j]=before[i][f[j]];
}
else//解密
{
for(j=0;j<lieshu;j++)//换列
for(i=0;i<hangshu;i++)
after[i][f[j]]=before[i][j];
}
}
void CJuzhenchange::toresult()//从after矩阵转化为result字符串
{
int i,j; int k=0;
for(i=0;i<hangshu;i++)
for(j=0;j<lieshu;j++)
{
result.Insert(k,after[i][j]);
k++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -