第八周项目4-字符串加密

问题及代码:

/*  
Copyright (c)2016,烟台大学计算机与控制工程学院  
All rights reserved.  
文件名称:ccc.cpp  
作    者:陈梦雪  
完成日期:2016年10月25日  
版 本 号:v1.0  
问题描述:一个文本串可用事先编制好的字符映射表进行加密。例如,设字符映射表为:  
            
          abcdefghijklmnopqrstuvwxyz  
          ngzqtcobmuhelkpdawxfyivrsj  
  
   则字符串“lao he jiao shu ju jie gou”被加密为“enp bt umnp xby uy umt opy”。   
   设计一个程序,实现加密、解密算法,将输入的文本进行加密后输出,然后进行解密并输出。  
  
输入描述: 无  
程序输出: 测试数据  
*/    
sqstring.h

#define MaxSize 100             //最多的字符个数    
typedef struct    
{   char data[MaxSize];         //定义可容纳MaxSize个字符的空间    
    int length;                 //标记当前实际串长    
} SqString;    
void Trans(SqString &s, char c1, char c2);  
void Invert(SqString &s);  
void DellChar(SqString &s, char c);  
SqString CommChar(SqString s1,SqString s2);     
void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s    
void StrCopy(SqString &s,SqString t);   //串t复制给串s    
bool StrEqual(SqString s,SqString t); //判串相等    
int StrLength(SqString s);  //求串长    
SqString Concat(SqString s,SqString t);  //串连接    
SqString SubStr(SqString s,int i,int j); //求子串    
SqString InsStr(SqString s1,int i,SqString s2); //串插入    
SqString DelStr(SqString s,int i,int j) ;   //串删去    
SqString RepStr(SqString s,int i,int j,SqString t);     //串替换    
void DispStr(SqString s);   //输出串   
sqstring.cpp

#include     
#include     
#include "SqString.h"    
void Trans(SqString &s, char c1, char c2)  
{  
    int i;  
    for (i=0; is.length || j<0 || i+j-1>s.length)    
        return str;                 //参数不正确时返回空串    
    for (k=i-1;ks1.length+1)  //参数不正确时返回空串    
        return str;    
    for (j=0;js.length || i+j>s.length+1) //参数不正确时返回空串    
        return str;    
    for (k=0;ks.length || i+j-1>s.length) //参数不正确时返回空串    
        return str;    
    for (k=0;k0)    
    {   for (i=0;i
main.cpp

#include "sqstring.h"  
  
SqString A,B; //用于存储字符映射表  
  
SqString EnCrypt(SqString p)  
{  
    int i=0,j;  
    SqString q;  
    while (i=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)            //在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;  
}  
运行结果:

第八周项目4-字符串加密_第1张图片

知识总结:顺序串的应用。

学习心得:掌握好串的基本应用,打好基础。

你可能感兴趣的:(第八周项目4-字符串加密)