题目:
一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:
abcdefghijklmnopqrstuvwxyz
ngzqtcobmuhelkpdawxfyivrsj
则字符串“abc”被加密为“ngz”。设计一个程序exp4-4.cpp将输入的文本串进行加密后输出,然后进行解密并输出。
代码:
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
#define MaxSize 27
char ch1[27]="abcdefghijklmnopqrstuvwxyz";
char ch2[27]="ngzqtcobmuhelkpdawxfyivrsj";
typedef struct
{
char data[MaxSize];
int length;
} SqString;
void StrAssign(SqString &s,char cstr[])
{
int i;
for(i=0; cstr[i]!='\0'; i++)
s.data[i]=cstr[i];
s.length=i;
}
bool jiami(SqString &s)
{
int k=0;
for(int i=0; i<s.length; i++)
{
if(ch1[i]==s.data[k])
{
s.data[k]=ch2[i];
k++;
i=-1;
}
}
if(k!=s.length)
return false;
return true;
}
bool jiemi(SqString &s)
{
int k=0;
for(int i=0; i<s.length; i++)
{
if(ch2[i]==s.data[k])
{
s.data[k]=ch1[i];
k++;
i=-1;
}
}
if(k!=s.length)
return false;
return true;
}
void DispStr(SqString s)
{
int i;
if(s.length>0)
{
for(i=0; i<s.length; i++)
cout<<s.data[i];
cout<<endl;
}
}
int main()
{
SqString s;
char a[26];
int i=0;
cout<<"输入原文串:";
gets(a);
cout<<endl;
StrAssign(s,a);
cout<<"加密解密如下:"<<endl;
cout<<" 原文串:";
puts(a);
cout<<" 加密串:";
if(jiami(s))
DispStr(s);
else
cout<<"无法找到加密码!"<<endl;
cout<<" 解密串:";
if(jiemi(s))
DispStr(s);
else
cout<<"无法找到解密码!"<<endl;
return 0;
}