题目要求
思路
这个是最关键的
97是‘a’的编码数字
类似的例子是
char c = '9';
int a = 0;
a = c - '0';
a = 9;//这样我们就知道了字符是对应的哪个数字
代码
#include <stdio.h>
#include"lab8_2_EncrypFunction.cpp"
int main() {
SqString p, s, x;//p为初始串,s为对应密文字母,x为输入串
char ch;int i = 0;
printf("现在是加密时间!\n");
char a[]="abcdefghijklmnopqrstuvwxyz";
char b[]="ngzqtcobmuhelkpdawxfyivrsj";
StrAssign_lijie(p, a);//建立初始串
StrAssign_lijie(s, b);//建立密文串
printf("输入原文串:");
while(scanf("%c", &ch) != EOF){
if(ch >= 'a' && ch <= 'z'){
x.data[i] = ch;
x.length++;
i++;
}
else
break;//输入非小写字母时停止录入
}
printf("加密解密如下:\n");
printf(" 原文串:");
DispStr_lijie(x);//展示输入串x
printf(" 加密串:");
EncrypFunction_lijie(p, s, x);//加密输入串
DispStr_lijie(x);//内置换行
printf(" 解密串:");
Decoding_lijie(p, s, x);
DispStr_lijie(x);
DestroyStr_lijie(p);DestroyStr_lijie(s);DestroyStr_lijie(x);
return 0;
}
lab8_2_EncrypFunction.cpp
//顺序串实现加密解密
#include <stdio.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize]; //串中字符
int length; //串长
} SqString; //声明顺序串类型
void StrAssign_lijie(SqString &x, char cstr[]) //字符串常量赋给串s
{
int i_1;
for (i_1 = 0; cstr[i_1] != '\0'; i_1++)
x.data[i_1] = cstr[i_1];
x.length = i_1;
}
void DestroyStr_lijie(SqString &s) //销毁串
{ }
void DispStr_lijie(SqString &s) //输出串s
{
if (s.length > 0)
{ for(int i = 0; i < s.length; i++)
printf("%c", s.data[i]);
printf("\n");
}
}
void EncrypFunction_lijie(SqString p, SqString s, SqString &x)//加密
{
char c;//坐标
for(int k = 0; k < x.length; k++)//按照输入串的长度循环
{
c = x.data[k] - 97;//在p中的位置
x.data[k] = s.data[c];
}
}
SqString Decoding_lijie(SqString p, SqString s, SqString &x)//解密
{
char c;
for(int v = 0; v < x.length; v++){
for(int j = 0; j < s.length; j++){
if(x.data[v] == s.data[j]){
x.data[v] = p.data[j];
break;
}
}
}
}