8周字符串加密

来源:互联网 发布:vendor.bundle.js文件 编辑:程序博客网 时间:2024/06/05 18:01
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /*  
  2. * Copyright (c)2016,烟台大学计算机与控制工程学院  
  3. * All rights reserved.  
  4. * 文件名称:项目4.cpp  
  5. * 作    者:泮春宇 
  6. * 完成日期:2016年11月10日  
  7. * 版 本 号:v1.0   
  8. *问题描述:一个文本串可用事先编制好的字符映射表进行加密。例如,设字符映射表为:  
  9.             
  10.           abcdefghijklmnopqrstuvwxyz  
  11.           ngzqtcobmuhelkpdawxfyivrsj  
  12.   
  13.    则字符串“lao he jiao shu ju jie gou”被加密为“enp bt umnp xby uy umt opy”。   
  14.    设计一个程序,实现加密、解密算法,将输入的文本进行加密后输出,然后进行解密并输出。  
  15. *输入描述:无  
  16. *程序输出:测试数据  
  17. */  



头文件sqString.h代码:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #define MaxSize 100             //最多的字符个数  
  3. typedef struct  
  4. {   char data[MaxSize];         //定义可容纳MaxSize个字符的空间  
  5.     int length;                 //标记当前实际串长  
  6. } SqString;  
  7.   
  8. void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s  
  9. void StrCopy(SqString &s,SqString t);   //串t复制给串s  
  10. bool StrEqual(SqString s,SqString t); //判串相等  
  11. int StrLength(SqString s);  //求串长  
  12. SqString Concat(SqString s,SqString t);  //串连接  
  13. SqString SubStr(SqString s,int i,int j); //求子串  
  14. SqString InsStr(SqString s1,int i,SqString s2); //串插入  
  15. SqString DelStr(SqString s,int i,int j) ;   //串删去  
  16. SqString RepStr(SqString s,int i,int j,SqString t);     //串替换  
  17. void DispStr(SqString s);   //输出串  


 

源文件sqString.cpp代码:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include "sqString.h"  
  2. void StrAssign(SqString &s,char cstr[])//字符串常量cstr赋给串s  
  3. {  
  4.     int i;  
  5.     for(i=0;cstr[i]!='\0';i++)  
  6.           s.data[i]=cstr[i];  
  7.     s.length=i;  
  8. }   
  9.   
  10. void StrCopy(SqString &s,SqString t)  //串t复制给串s  
  11. {  
  12.     int i;  
  13.     for(i=0;i<t.length;i++)  
  14.         s.data[i]=t.data[i];  
  15.     s.length=t.length;  
  16. }  
  17. bool StrEqual(SqString s,SqString t) //判串相等  
  18. {  
  19.     bool same=true;  
  20.     int i;  
  21.     if(s.length!=t.length)  
  22.         same=false;  
  23.     else      
  24.         for(i=0;i<s.length;i++)    
  25.             if(s.data[i]!=t.data[i])  
  26.             {  
  27.                 same=false;  
  28.                 break;  
  29.             }  
  30.     return same;  
  31. }  
  32. int StrLength(SqString s) //求串长  
  33. {  
  34.     return (s.length);  
  35. }  
  36. SqString Concat(SqString s,SqString t) //串连接  
  37. {  
  38.     SqString str;  
  39.     int i;  
  40.     for(i=0;i<s.length;i++)  
  41.         str.data[i]=s.data[i];  
  42.     for(i=0;i<t.length;i++)  
  43.         str.data[i+s.length]=t.data[i];  
  44.     str.length=s.length+t.length;  
  45.     return str;  
  46. }  
  47. SqString SubStr(SqString s,int i,int j) //求子串   (1<=i<=StrLength(s))  
  48. {  
  49.     SqString str;  
  50.     int k;  
  51.     str.length=0;  //是为了当参数不合适的话返回空串  
  52.     if(i<=0||i>s.length||j<0||i+j-1>s.length)    
  53.         return str;            //i和j 都不在范围之内,参数不正确时返回空串  
  54.     for(k=i-1;k<i+j-1;k++)  
  55.         str.data[k-i+1]=s.data[k];  
  56.     str.length=j;  
  57.     return str;  
  58. }  
  59. SqString InsStr(SqString s1,int i,SqString s2) //串插入 (1<=i<=StrLength(s1)+1)  
  60. {  
  61.     SqString str;  
  62.     int j;  
  63.     str.length=0; //是为了当参数不合适的话返回空串  
  64.     if(i<=0||i>s1.length+1)  //对比上一个,之所以要加上1,是因为如果只是s1.length是正确的,可以在后面添加s2,但如果是加上1,则超出范围。  
  65.         return str;  
  66.     for(j=0;j<i-1;j++)  
  67.         str.data[j]=s1.data[j];  
  68.     for(j=0;j<s2.length;j++)  
  69.         str.data[i-1+j]=s2.data[j];  
  70.     for(j=i-1;j<s1.length;j++)  
  71.         str.data[j+s2.length]=s1.data [j];  
  72.     str.length=s1.length +s2.length ;//别忘记 串的长度  
  73.     return str;  
  74. }  
  75. SqString DelStr(SqString s,int i,int j)    //串删去  
  76. {  
  77.     SqString str;  
  78.     str.length=0;  
  79.     if(i<=0||i>s.length||i+j>s.length+1)   //参数不正确时返回空串     
  80.         return str;    
  81.     int k;  
  82.     for(k=0;k<i-1;k++)  
  83.         str.data[k]=s.data[k];  
  84.     for(k=i+j-1;k<s.length;k++)  
  85.         str.data[k-j]=s.data[k];  
  86.     str.length=s.length-j;  
  87.     return str;  
  88. }  
  89. SqString RepStr(SqString s,int i,int j,SqString t)     //串替换  
  90. {  
  91.     SqString str;  
  92.     str.length=0;  
  93.     if(i<=0||i>s.length||i+j-1>s.length)   //参数不正确是返回空串  
  94.         return str;    
  95.     int k;  
  96.     for(k=0;k<i-1;k++)  
  97.         str.data[k]=s.data[k];  
  98.     for(k=0;k<t.length;k++)  
  99.         str.data[k+i-1]=t.data[k];  
  100.     for(k=i+j-1;k<s.length;k++)  
  101.         str.data[t.length+k-j]=s.data[k];  
  102.     str.length=s.length+t.length-j;  
  103.     return str;  
  104. }  
  105. void DispStr(SqString s)   //输出串  
  106. {  
  107.     int i;  
  108.     if(s.length>0)  
  109.     {  
  110.         for(i=0;i<s.length;i++)  
  111.             printf("%c",s.data[i]);  
  112.         printf("\n");  
  113.     }  
  114. }  


 

源文件main.cpp代码:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include "sqString.h"  
  3. SqString A,B; //用于存储字符映射表  
  4.   
  5. SqString EnCrypt(SqString p)  
  6. {  
  7.     int i=0,j;  
  8.     SqString q;  
  9.     while (i<p.length)  
  10.     {  
  11.         for (j=0; p.data[i]!=A.data[j]&&j<A.length; j++);  
  12.         if (j>=A.length)            //在A串中未找到p.data[i]字母  
  13.             q.data[i]=p.data[i];  
  14.         else                        //在A串中找到p.data[i]字母  
  15.             q.data[i]=B.data[j];  
  16.         i++;  
  17.     }  
  18.     q.length=p.length;  
  19.     return q;  
  20. }  
  21.   
  22. SqString UnEncrypt(SqString q)  
  23. {  
  24.     int i=0,j;  
  25.     SqString p;  
  26.     while (i<q.length)  
  27.     {  
  28.         for (j=0; q.data[i]!=B.data[j]&&j<B.length; j++);  
  29.         if (j>=B.length)            //在B串中未找到q.data[i]字母  
  30.             p.data[i]=q.data[i];  
  31.         else                    //在B串中找到q.data[i]字母  
  32.             p.data[i]=A.data[j];  
  33.         i++;  
  34.     }  
  35.     p.length=q.length;  
  36.     return p;  
  37. }  
  38.   
  39. int main()  
  40. {  
  41.     SqString p,q;  
  42.     StrAssign(A,"abcdefghijklmnopqrstuvwxyz");  //建立A串  
  43.     StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj");  //建立B串  
  44.     char str[MaxSize];  
  45.     printf("输入原文串:");  
  46.     gets(str);                                  //获取用户输入的原文串  
  47.     StrAssign(p,str);                           //建立p串  
  48.     printf("加密解密如下:\n");  
  49.     printf("  原文串:");  
  50.     DispStr(p);  
  51.     q=EnCrypt(p);                               //p串加密产生q串  
  52.     printf("  加密串:");  
  53.     DispStr(q);  
  54.     p=UnEncrypt(q);                         //q串解密产生p串  
  55.     printf("  解密串:");  
  56.     DispStr(p);  
  57.     printf("\n");  
  58.     return 0;  
  59. }  

运行结果:


知识点总结:运用了串的思想去解决问题。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 vultr ip被墙了怎么办 油蜡牛皮包脏了怎么办 客人丢了车钥匙怎么办 1号店怎么打不开怎么办 手机中了呼死你怎么办 银行卡u盾丢了怎么办 空军一号皮裂了怎么办 跑步跑的脚腕疼怎么办 走路多了脚腕疼怎么办 白鞋子洗了发黄怎么办 来大姨妈腰疼怎么办 绒面长筒靴掉筒怎么办 钢铁雄心4很卡怎么办 点透视点在纸外怎么办 被新浪微博屏蔽怎么办 孩子痰多鼻涕多怎么办 感冒痰多鼻涕多怎么办 最近鼻涕和痰多怎么办 鼻涕痰多怎么办没感冒 一岁宝宝痰多怎么办 小孩鼻涕和痰多怎么办 鼻子老长鼻屎要怎么办 眼睛老有眼屎是怎么办 眼睛有干眼屎是怎么办 小孩流黄鼻涕是怎么办 孕妇9个月流鼻涕怎么办 流黄鼻涕两周了怎么办 大人流黄脓鼻涕怎么办 鼻子一直流鼻涕像水一样怎么办 6个月婴儿流鼻涕怎么办 9个月婴儿流鼻涕怎么办 狗狗晕车吐了怎么办 小狗又拉又吐怎么办 犬瘟热流黄鼻涕怎么办 2个月幼犬流鼻涕怎么办 5个月宝宝流鼻血怎么办 1岁宝宝感冒鼻塞怎么办 4个月宝宝鼻塞怎么办 4岁宝宝感冒鼻塞怎么办 宝宝4个月流鼻涕怎么办 3个月的宝宝鼻塞怎么办