文本串加密和解密程序
目的:掌握串的应用算法设计。
内容:一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:
a b c d e f g h i j k l m n o p q r s t u v w x y z
n g z q t c o b m u h e l k p d a w x f y i v r s j
则字符串“encrypt”被加密为“tkzwsdf”。编写一个程序,将输入的文本串加密后输出,然后进行解密并输出。
思路:建立两个字符串,其中一个为原字母表,另一个为映射字母表,在其中一个表中找到对应字符,该字符所在下标对应在另一个表中就可以找到要转换为的字符。
解密或加密程序:
只需改变原字母表和映射字母表的顺序就可以完成解密或加密。
代码环境为vs2019 16.11.2,其中scanf需变为sacnf_s,其他环境只需改回为scanf即可。
void STRstr(char* Str, char* S1, char* S2)
{
int i, j;
for (i = 0; Str[i] != '\0'; i++) {
for (j = 0; S1[j] != '\0'; j++) {
if (Str[i] == S1[j]) {
Str[i] = S2[j]; //将字母进行对应的映射
break;
}
}
}
}
代入主函数
#include<stdio.h>
#define Max 9999
void STRstr(char*, char*, char*); //解密或加密程序
int main(int argc, const char* argvp[])
{
char A[] = "abcdefghijklmnopqrstuvwxyz"; //原字母表
char B[] = "ngzqtcobmuhelkpdawxfyivrsj"; //映射字母表
char Str[Max]; //要进行操作的字符串
printf("请输入一个字符串,只包含小写字母,并且小于%d。\n", Max);
scanf_s("%s", Str, Max);
STRstr(Str, A, B);
printf("加密后为:%s\n", Str);
STRstr(Str, B, A);
printf("解密后为:%s\n", Str);
}
void STRstr(char* Str, char* S1, char* S2)
{
int i, j;
for (i = 0; Str[i] != '\0'; i++) {
for (j = 0; S1[j] != '\0'; j++) {
if (Str[i] == S1[j]) {
Str[i] = S2[j]; //将字母进行对应的映射
break;
}
}
}
}