第八周--项目4字符串加密
2015-10-23 09:17
246 查看
* * Copyright (c++) 2015 烟台大学计算机学院 * All right reserved. * 文件名称:project4.cpp * 作 者: 商文轲 * 完成日期:2015年10月20日 * 版 本 号:v1.9 * 问题描述:一个文本串可用事先编制好的字符映射表进行加密。例如,设字符映射表为: abcdefghijklmnopqrstuvwxyz ngzqtcobmuhelkpdawxfyivrsj 则字符串“lao he jiao shu ju jie gou”被加密为“enp bt umnp xby uy umt opy”。 设计一个程序,实现加密、解密算法,将输入的文本进行加密后输出,然后进行解密并输出。 * */
程序采用多组织结构,用到顺序串算法库SqString.h
只将添加函数和主函数列出
#include <stdio.h>
#include "sqString.h"
SqString A,B; //用于存储字符映射表
SqString EnCrypt(SqString p)
{
int i=0,j;
SqString q;
while (i<p.length)
{
for (j=0; p.data[i]!=A.data[j]; j++);
if (j>=p.length) //在A串中未找到p.data[i]字母
q.data[i]=p.data[i];
else //在A串中找到p.data[i]字母
q.data[i]=B.data[j];
i++;
}
q.length=p.length;
return q;
}
SqString UnEncrypt(SqString q)
{
int i=0,j;
SqString p;
while (i<q.length)
{
for (j=0; q.data[i]!=B.data[j]; j++);
if (j>=q.length) //在B串中未找到q.data[i]字母
p.data[i]=q.data[i];
else //在B串中找到q.data[i]字母
p.data[i]=A.data[j];
i++;
}
p.length=q.length;
return p;
}
int main()
{
SqString p,q;
StrAssign(A,"abcdefghijklmnopqrstuvwxyz"); //建立A串
StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj"); //建立B串
char str[MaxSize];
printf("\n");
printf("输入原文串:");
gets(str); //获取用户输入的原文串
StrAssign(p,str); //建立p串
printf("加密解密如下:\n");
printf(" 原文串:");
DispStr(p);
q=EnCrypt(p); //p串加密产生q串
printf(" 加密串:");
DispStr(q);
p=UnEncrypt(q); //q串解密产生p串
printf(" 解密串:");
DispStr(p);
printf("\n");
return 0;
}
总结:首先要考虑大的循环情况while,再看将要加密解密的串是否能在映射传中找到(用if else 实现),最后注意设置返回值和函数类型对应。
相关文章推荐
- 第七周项目3 负数把正数赶出去
- easyUI dialog弹出时适应页面大小
- jquery validate 详解
- LeetCode45——Jump Game II
- 免安装oracle客户端数据库,使用PL/SQL连接服务器oracle数据库
- 在linux下挂载、卸载U盘
- 面试技巧
- 第七周项目3—负数把正数赶出队列
- 第七周项目2-建立链式队列算法库
- 【第7周 项目4 - 队列数组】
- 第七周实践项目~建立顺序环形队列算法库
- 文档利器:LaTeX新人教程,30分钟从完全陌生到基本入门
- C++的引用
- 无聊的大二
- 第七周项目6--停车场模拟
- VS创建安装服务
- 浅谈php7的重大新特性
- Hibernate查询总结
- 九度OJ 1096:日期差值 (日期计算)
- android.content.ActivityNotFoundException: Unable to find explicit activity class have you declared this activity in your AndroidManifest.xml?