第八周项目三(4)

  1. *Copyright(c)2016,烟台大学计算机与控制工程学院  
  2.  *All right reserved.  
  3.  *文件名称:公共字符串.cpp  
  4.  *作者:宋雨静 
  5.  *完成日期;2016年10月20日  
  6.  *版本号;v1.0  
  7.  *  
  8.  *问题描述: 有两个串s1和s2,设计一个算法求一个这样的串,该串中的字符是s1和s2中公共字符。所谓公共子串,是由在s1中有,  
  9.  且在s2中也有的字符构成的字符。例s1为”message”,s2为”agent”,得到的公共子串是”eage”。   
  10.   
  11.  *输入描述:两行字符串  
  12.  *程序输出:两行字符串共同具备的字符串  
  13. */  
  14. #include <stdio.h>  
  15. #include "sqString.h"  
  16. int main()  
  17. {  
  18.     SqString s1, s2, s;  
  19.     StrAssign(s1, "message");  
  20.     StrAssign(s2, "agent");  
  21.     s = CommChar(s1, s2);  
  22.     DispStr(s);  
  23.     return 0;  
  24. }  
  25. #include <stdio.h>  
  26. #include <malloc.h>  
  27. #include "SqString.h"  
  28. SqString CommChar(SqString s1,SqString s2)  
  29. {  
  30.     SqString s3;  
  31.     int i,j,k=0;  
  32.     for (i=0; i<s1.length; i++)  
  33.     {  
  34.         for (j=0; j<s2.length; j++)  
  35.             if (s2.data[j]==s1.data[i])  
  36.                 break;  
  37.         if (j<s2.length)            //s1.data[i]是公共字符  
  38.         {  
  39.             s3.data[k]=s1.data[i];  
  40.             k++;  
  41.         }  
  42.     }  
  43.     s3.length=k;  
  44.     return s3;  
  45. }  
  46.   
  47. void StrAssign(SqString &s,char cstr[]) //s为引用型参数  
  48. {   int i;  
  49.     for (i=0;cstr[i]!='\0';i++)  
  50.         s.data[i]=cstr[i];  
  51.     s.length=i;  
  52. }  
  53. void StrCopy(SqString &s,SqString t)    //s为引用型参数  
  54. {   int i;  
  55.     for (i=0;i<t.length;i++)  
  56.         s.data[i]=t.data[i];  
  57.     s.length=t.length;  
  58. }  
  59. bool StrEqual(SqString s,SqString t)  
  60. {   bool same=true;  
  61.     int i;  
  62.     if (s.length!=t.length)             //长度不相等时返回0  
  63.         same=false;  
  64.     else  
  65.         for (i=0;i<s.length;i++)  
  66.             if (s.data[i]!=t.data[i])   //有一个对应字符不相同时返回0  
  67.             {   same=false;  
  68.                 break;  
  69.             }  
  70.     return same;  
  71. }  
  72. int StrLength(SqString s)  
  73. {  
  74.     return s.length;  
  75. }  
  76. SqString Concat(SqString s,SqString t)  
  77. {   SqString str;  
  78.     int i;  
  79.     str.length=s.length+t.length;  
  80.     for (i=0;i<s.length;i++)    //将s.data[0..s.length-1]复制到str  
  81.         str.data[i]=s.data[i];  
  82.     for (i=0;i<t.length;i++)    //将t.data[0..t.length-1]复制到str  
  83.         str.data[s.length+i]=t.data[i];  
  84.     return str;  
  85. }  
  86. SqString SubStr(SqString s,int i,int j)  
  87. {   SqString str;  
  88.     int k;  
  89.     str.length=0;  
  90.     if (i<=0 || i>s.length || j<0 || i+j-1>s.length)  
  91.         return str;                 //参数不正确时返回空串  
  92.     for (k=i-1;k<i+j-1;k++)         //将s.data[i..i+j]复制到str  
  93.         str.data[k-i+1]=s.data[k];  
  94.     str.length=j;  
  95.     return str;  
  96. }  
  97. SqString InsStr(SqString s1,int i,SqString s2)  
  98. {   int j;  
  99.     SqString str;  
  100.     str.length=0;  
  101.     if (i<=0 || i>s1.length+1)  //参数不正确时返回空串  
  102.         return str;  
  103.     for (j=0;j<i-1;j++)             //将s1.data[0..i-2]复制到str  
  104.         str.data[j]=s1.data[j];  
  105.     for (j=0;j<s2.length;j++)       //将s2.data[0..s2.length-1]复制到str  
  106.         str.data[i+j-1]=s2.data[j];  
  107.     for (j=i-1;j<s1.length;j++)     //将s1.data[i-1..s1.length-1]复制到str  
  108.         str.data[s2.length+j]=s1.data[j];  
  109.     str.length=s1.length+s2.length;  
  110.     return str;  
  111. }  
  112. void Invert(SqString &s)  
  113. {  
  114.     int i;  
  115.     char temp;  
  116.     for (i=0; i<s.length/2; i++)  
  117.     {  
  118.         temp = s.data[i];  
  119.         s.data[i]=s.data[s.length-i-1];  
  120.         s.data[s.length-i-1] = temp;  
  121.     }  
  122. }  
  123. void DellChar(SqString &s, char c)  
  124. {  
  125.     int k=0, i=0;   //k记录值等于c的字符个数  
  126.     while(i<s.length)  
  127.     {  
  128.         if(s.data[i]==c)  
  129.             k++;  
  130.         else  
  131.             s.data[i-k]=s.data[i];  
  132.         i++;  
  133.     }  
  134.     s.length -= k;  
  135. }  
  136.   
  137. SqString DelStr(SqString s,int i,int j)  
  138. {   int k;  
  139.     SqString str;  
  140.     str.length=0;  
  141.     if (i<=0 || i>s.length || i+j>s.length+1) //参数不正确时返回空串  
  142.         return str;  
  143.     for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到str  
  144.         str.data[k]=s.data[k];  
  145.     for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到str  
  146.         str.data[k-j]=s.data[k];  
  147.     str.length=s.length-j;  
  148.     return str;  
  149. }  
  150. SqString RepStr(SqString s,int i,int j,SqString t)  
  151. {   int k;  
  152.     SqString str;  
  153.     str.length=0;  
  154.     if (i<=0 || i>s.length || i+j-1>s.length) //参数不正确时返回空串  
  155.         return str;  
  156.     for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到str  
  157.         str.data[k]=s.data[k];  
  158.     for (k=0;k<t.length;k++)        //将t.data[0..t.length-1]复制到str  
  159.         str.data[i+k-1]=t.data[k];  
  160.     for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到str  
  161.         str.data[t.length+k-j]=s.data[k];  
  162.     str.length=s.length-j+t.length;  
  163.     return str;  
  164. }  
  165. void DispStr(SqString s)  
  166. {   int i;  
  167.     if (s.length>0)  
  168.     {   for (i=0;i<s.length;i++)  
  169.             printf("%c",s.data[i]);  
  170.         printf("\n");  
  171.     }  
  172. }  
  173. #define MaxSize 100             //最多的字符个数  
  174. typedef struct  
  175. {   char data[MaxSize];         //定义可容纳MaxSize个字符的空间  
  176.     int length;                 //标记当前实际串长  
  177. } SqString;  
  178.   
  179. void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s  
  180. void StrCopy(SqString &s,SqString t);   //串t复制给串s  
  181. bool StrEqual(SqString s,SqString t); //判串相等  
  182. int StrLength(SqString s);  //求串长  
  183. SqString Concat(SqString s,SqString t);  //串连接  
  184. SqString SubStr(SqString s,int i,int j); //求子串  
  185. SqString InsStr(SqString s1,int i,SqString s2); //串插入  
  186. SqString DelStr(SqString s,int i,int j) ;   //串删去  
  187. SqString RepStr(SqString s,int i,int j,SqString t);     //串替换  
  188. void DispStr(SqString s);   //输出串  
  189.   
  190. void Invert(SqString &s);  
  191. void DellChar(SqString &s, char c);  
  192. SqString CommChar(SqString s1,SqString s2);  


运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值