第八周项目4 字符串加密

  1. /* 
  2.  *Copyright (c) 2016,烟台大学计算机学院 
  3.  *All rights reserved. 
  4.  *文件名称:zifuchuanjiami.cpp 
  5.  *作者:衣龙川 
  6.  *完成日期:2015年10月27日 
  7.  *版本号:vc++6.0 
  8.  * 
  9.  *问题描述:字符串加密 
  10.  *输入描述:一组字符 
  11.  *程序输出:加密后的字符 
  12. */  


[cpp]  view plain  copy
  1. #ifndef HEAD_H_INCLUDED  
  2. #define HEAD_H_INCLUDED  
  3. #include <malloc.h>  
  4. #include <stdio.h>  
  5. #define MaxSize 100  
  6. typedef struct  
  7. {  
  8.     char data[MaxSize];  
  9.     int length;  
  10. }SqString;  
  11. void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s  
  12. void StrCopy(SqString &s,SqString t);   //串t复制给串s  
  13. bool StrEqual(SqString s,SqString t); //判串相等  
  14. int StrLength(SqString s);  //求串长  
  15. SqString Concat(SqString s,SqString t);  //串连接  
  16. SqString SubStr(SqString s,int i,int j); //求子串  
  17. SqString InsStr(SqString s1,int i,SqString s2); //串插入  
  18. SqString DelStr(SqString s,int i,int j) ;   //串删去  
  19. SqString RepStr(SqString s,int i,int j,SqString t);     //串替换  
  20. void DispStr(SqString s);   //输出串  
  21. SqString UnEncrypt(SqString q);  
  22. SqString EnCrypt(SqString p);  
  23. #endif // HEAD_H_INCLUDED  


[cpp]  view plain  copy
  1. #include "head.h"  
  2. int main()  
  3. {  
  4.   
  5.     SqString A,B; //用于存储字符映射表  
  6.     SqString p,q;  
  7.     StrAssign(A,"abcdefghijklmnopqrstuvwxyz");  //建立A串  
  8.     StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj");  //建立B串  
  9.     char str[MaxSize];  
  10.     printf("\n");  
  11.     printf("输入原文串:");  
  12.     gets(str);                                  //获取用户输入的原文串  
  13.     StrAssign(p,str);                           //建立p串  
  14.     printf("加密解密如下:\n");  
  15.     printf("  原文串:");  
  16.     DispStr(p);  
  17.     q=EnCrypt(p);                               //p串加密产生q串  
  18.     printf("  加密串:");  
  19.     DispStr(q);  
  20.     p=UnEncrypt(q);                         //q串解密产生p串  
  21.     printf("  解密串:");  
  22.     DispStr(p);  
  23.     printf("\n");  
  24.     return 0;  
  25. }  


[cpp]  view plain  copy
  1. #include "head.h"  
  2. #include<stdio.h>  
  3.   
  4. void StrAssign(SqString &s,char cstr[])  
  5. {  
  6.     int i;  
  7.     for(i=0; cstr[i]!='\0'; i++)  
  8.         s.data[i]=cstr[i];  
  9.     s.length=i;  
  10. }  
  11. //´®->´®  
  12. void StrCopy(SqString &s,SqString t)  
  13. {  
  14.     int i;  
  15.     for(i=0; i<s.length; i++)  
  16.         s.data[i]=t.data[i];  
  17.     s.length=t.length;  
  18. }  
  19. bool StrEqual(SqString s,SqString t)  
  20. {  
  21.     int i;  
  22.     if(s.length!=t.length)  
  23.         return false;  
  24.     else  
  25.         for(i=0; i<s.length; i++)  
  26.         {  
  27.             if(s.data[i]!=t.data[i])  
  28.                 return false;  
  29.         }  
  30.     return true;  
  31. }  
  32. int StrLength(SqString s)  
  33. {  
  34.     return s.length;  
  35. }  
  36. //串的连接  
  37. SqString Concat(SqString s,SqString t)  
  38. {  
  39.     SqString str;  
  40.     str.length=0;  
  41.     int i;  
  42.     for(i=0; i<s.length; i++)  
  43.         str.data[i]=s.data[i];  
  44.     for(i=0; i<t.length; i++)  
  45.         str.data[s.length+i]=t.data[i];  
  46.     str.length=s.length+t.length;  
  47.     return str;  
  48. }  
  49. //求子串  
  50. SqString SubStr(SqString s,int i,int j)  
  51. {  
  52.     SqString str;  
  53.     str.length=0;  
  54.     if(i<=0||i>s.length||j<0||i+j-1>s.length)  
  55.         return str;  
  56.     for(int m=0; m<j; m++)  
  57.     {  
  58.         str.data[m]=s.data[i-1];  
  59.         i++;  
  60.     }  
  61.     str.length=j;  
  62.     return str;  
  63. }  
  64. //串的插入  
  65. SqString InsStr(SqString s1,int i,SqString s2)  
  66. {  
  67.     SqString str;  
  68.     str.length=0;  
  69.     int j;  
  70.     if(i<=0||i>s1.length+1)  
  71.         return str;  
  72.     for(j=0; j<i-1; j++)  
  73.         str.data[j]=s1.data[j];  
  74.     for(j=0; j<s2.length; j++)  
  75.         str.data[i+j-1]=s2.data[j];  
  76.     for(j=i-1; j<s1.length; j++)  
  77.         str.data[j+s2.length]=s1.data[j];  
  78.     str.length=s1.length+s2.length;  
  79.     return str;  
  80. }  
  81. //删除子串  
  82. SqString DelStr(SqString s,int i,int j)  
  83. {  
  84.     int m;  
  85.     SqString str;  
  86.     if(i<=0||i>s.length||j<0||i+j-1>s.length)  
  87.         return str;  
  88.     for(m=0; m<i-1; m++)  
  89.         str.data[m]=s.data[m];  
  90.     for(m=0; m<s.length-j-1; m++)  
  91.         str.data[i-1+m]=s.data[i+j-1+m];  
  92.     str.length=s.length-j;  
  93.     return str;  
  94. }  
  95. //串的替换  
  96. SqString RepStr(SqString s,int i,int j,SqString t)  
  97. {  
  98.     int m;  
  99.     SqString str;  
  100.     str.length=0;  
  101.     if(i<=0||i>s.length||i+j-1>s.length)  
  102.         return str;  
  103.     for(m=0; m<i+j-1; m++)  
  104.         str.data[m]=s.data[m];  
  105.     for(m=0; m<t.length; m++)  
  106.         str.data[i-1+m]=t.data[m];  
  107.     for(m=i+j-1; m<s.length; m++)  
  108.         str.data[m-j+t.length]=s.data[m];  
  109.     str.length=s.length+t.length-j;  
  110.     return str;  
  111.   
  112. }  
  113. void DispStr(SqString s)  
  114. {  
  115.     int i;  
  116.     if(s.length>0)  
  117.     {  
  118.         for(i=0; i<s.length; i++)  
  119.             printf("%c",s.data[i]);  
  120.         printf("\n");  
  121.     }  
  122. }  
  123. SqString EnCrypt(SqString p)  
  124. {  
  125.     SqString A,B; //用于存储字符映射表  
  126.     StrAssign(A,"abcdefghijklmnopqrstuvwxyz");  
  127.     StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj");  
  128.     int i=0,j;  
  129.     SqString q;  
  130.     while (i<p.length)  
  131.     {  
  132.         for (j=0; p.data[i]!=A.data[j]; j++); //循环条件少加了&&j<A.length  
  133.         if (j>=p.length)            //在A串中未找到p.data[i]字母  
  134.             q.data[i]=p.data[i];  
  135.         else                        //在A串中找到p.data[i]字母  
  136.             q.data[i]=B.data[j];  
  137.         i++;  
  138.     }  
  139.     q.length=p.length;  
  140.     return q;  
  141. }  
  142.   
  143. SqString UnEncrypt(SqString q)  
  144. {  
  145.     SqString A,B; //用于存储字符映射表  
  146.     StrAssign(A,"abcdefghijklmnopqrstuvwxyz");  
  147.     StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj");  
  148.     int i=0,j;  
  149.     SqString p;  
  150.     while (i<q.length)  
  151.     {  
  152.         for (j=0; q.data[i]!=B.data[j]; j++);//循环条件少加了&&j<B.length  
  153.         if (j>=q.length)            //在B串中未找到q.data[i]字母  
  154.             p.data[i]=q.data[i];  
  155.         else                    //在B串中找到q.data[i]字母  
  156.             p.data[i]=A.data[j];  
  157.         i++;  
  158.     }  
  159.     p.length=q.length;  
  160.     return p;  
  161. }  


运行结果:

知识点总结:

解密的思路也与加密的思路相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值