实验题目
文本串的加密解密实验
实验内容
- 一个文本串可用事先给定的字母映射表进行加密。
实验要求
- 编写Sqstring.h文件,同时实现以下函数:
- StrAssign():用于生成串
- strcpy():用于复制串
- strcmp():用于比较两个串的大小
- DispStr():用于输出串
实验过程记录
- 创建一个名为SqString.h的文件,用于存放串操作的函数声明。
- 在SqString.h文件中,声明以下函数:
- StrAssign():用于生成串
- strcpy():用于复制串
- strcmp():用于比较两个串的大小
- DispStr():用于输出串
- 实现这些函数。在主程序中,先定义一个字母映射表,然后根据这个映射表进行加密和解密操作。
- 对于加密操作,用遍历来输入的文本串,将每个字符替换为映射表中对应的字符。解密操作则是将加密后的字符替换回原始字符。
- 最后,在Main.Cpp里测试所写的串操作函数。输入一个字符串,然后调用加密和解密函数,观察输出结果是否正确。
以下是SqString.h文件的内容:
#include <stdio.h>
#include <string.h>
typedef struct {
char ch[100];
int length;
} SqString;
void StrAssign(SqString *str, const char *src) {
str->length = strlen(src);
for (int i = 0; i < str->length; i++) {
str->ch[i] = src[i];
}
}
void DispStr(const SqString *str) {
for (int i = 0; i < str->length; i++) {
printf("%c", str->ch[i]);
}
printf("\n");
}
以下是Main.cpp文件的内容:
#include"SqString.h"
int main() {
char str[10];
// 原串
SqString original;
// 密码映射表
char map[26] = {'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'};
// 初始化原串
printf("初始串:");
scanf("%s",str);
StrAssign(&original, str);
// 密码串
SqString encrypted;
char c;
for(int i = 0; i < original.length; i++) {
c = original.ch[i];
if(c >= 'a' && c <= 'z') {
c = map[c-'a']; // 密码替换
}
encrypted.ch[i] = c; // 拼接成密文
}
encrypted.length = original.length;
// 输出密文
printf("加密串:");
DispStr(&encrypted);
// 解密
for(int i = 0; i < encrypted.length; i++) {
c = encrypted.ch[i];
if(c >= 'a' && c <= 'z') {
for(int j = 0; j < 26; j++) {
if(map[j] == c) {
c = 'a' + j;
break;
}
}
}
original.ch[i] = c; // 恢复原文字母
}
// 输出解密结果
printf("解密串:");
DispStr(&original);
return 0;
}
运行结果
结果如图所示。
实验总结(个人心得)
通过本次实验,学会运用一个简单的字符串处理库。
在实验过程中,也遇到一些问题,例如如何正确地复制字符串、如何比较两个字符串等。