第八周项目三(1)顺序串算法

来源:互联网 发布:c语言算法描述举例 编辑:程序博客网 时间:2024/06/05 03:34
  1. *Copyright(c)2016,烟台大学计算机与控制工程学院  
  2.  *All right reserved.  
  3.  *文件名称:顺序串算法.cpp  
  4.  *作者:宋雨静 
  5.  *完成日期;2016年10月20日  
  6.  *版本号;v1.0  
  7.  *  
  8.  *问题描述: 试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符  
  9.   
  10.   
  11.  *输入描述:需要替换的字符  
  12.  *程序输出:替换之后的字符  
  13. */  
  14.   
  15.   
  16. #include <stdio.h>  
  17. #include "sqString.h"  
  18. int main()  
  19. {  
  20.     SqString s;  
  21.     StrAssign(s, "messages");  
  22.     Trans(s, 'e''a');  
  23.     DispStr(s);  
  24.     return 0;  
  25. }  
  26. #include <stdio.h>  
  27. #include <malloc.h>  
  28. #include "SqString.h"  
  29. void Trans(SqString &s, char c1, char c2)  
  30. {  
  31.     int i;  
  32.     for (i=0; i<s.length; i++)  
  33.         if (s.data[i]==c1)  
  34.             s.data[i]=c2;  
  35. }  
  36.   
  37.   
  38. void StrAssign(SqString &s,char cstr[]) //s为引用型参数  
  39. {   int i;  
  40.     for (i=0;cstr[i]!='\0';i++)  
  41.         s.data[i]=cstr[i];  
  42.     s.length=i;  
  43. }  
  44. void StrCopy(SqString &s,SqString t)    //s为引用型参数  
  45. {   int i;  
  46.     for (i=0;i<t.length;i++)  
  47.         s.data[i]=t.data[i];  
  48.     s.length=t.length;  
  49. }  
  50. bool StrEqual(SqString s,SqString t)  
  51. {   bool same=true;  
  52.     int i;  
  53.     if (s.length!=t.length)             //长度不相等时返回0  
  54.         same=false;  
  55.     else  
  56.         for (i=0;i<s.length;i++)  
  57.             if (s.data[i]!=t.data[i])   //有一个对应字符不相同时返回0  
  58.             {   same=false;  
  59.                 break;  
  60.             }  
  61.     return same;  
  62. }  
  63. int StrLength(SqString s)  
  64. {  
  65.     return s.length;  
  66. }  
  67. SqString Concat(SqString s,SqString t)  
  68. {   SqString str;  
  69.     int i;  
  70.     str.length=s.length+t.length;  
  71.     for (i=0;i<s.length;i++)    //将s.data[0..s.length-1]复制到str  
  72.         str.data[i]=s.data[i];  
  73.     for (i=0;i<t.length;i++)    //将t.data[0..t.length-1]复制到str  
  74.         str.data[s.length+i]=t.data[i];  
  75.     return str;  
  76. }  
  77. SqString SubStr(SqString s,int i,int j)  
  78. {   SqString str;  
  79.     int k;  
  80.     str.length=0;  
  81.     if (i<=0 || i>s.length || j<0 || i+j-1>s.length)  
  82.         return str;                 //参数不正确时返回空串  
  83.     for (k=i-1;k<i+j-1;k++)         //将s.data[i..i+j]复制到str  
  84.         str.data[k-i+1]=s.data[k];  
  85.     str.length=j;  
  86.     return str;  
  87. }  
  88. SqString InsStr(SqString s1,int i,SqString s2)  
  89. {   int j;  
  90.     SqString str;  
  91.     str.length=0;  
  92.     if (i<=0 || i>s1.length+1)  //参数不正确时返回空串  
  93.         return str;  
  94.     for (j=0;j<i-1;j++)             //将s1.data[0..i-2]复制到str  
  95.         str.data[j]=s1.data[j];  
  96.     for (j=0;j<s2.length;j++)       //将s2.data[0..s2.length-1]复制到str  
  97.         str.data[i+j-1]=s2.data[j];  
  98.     for (j=i-1;j<s1.length;j++)     //将s1.data[i-1..s1.length-1]复制到str  
  99.         str.data[s2.length+j]=s1.data[j];  
  100.     str.length=s1.length+s2.length;  
  101.     return str;  
  102. }  
  103. SqString DelStr(SqString s,int i,int j)  
  104. {   int k;  
  105.     SqString str;  
  106.     str.length=0;  
  107.     if (i<=0 || i>s.length || i+j>s.length+1) //参数不正确时返回空串  
  108.         return str;  
  109.     for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到str  
  110.         str.data[k]=s.data[k];  
  111.     for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到str  
  112.         str.data[k-j]=s.data[k];  
  113.     str.length=s.length-j;  
  114.     return str;  
  115. }  
  116. SqString RepStr(SqString s,int i,int j,SqString t)  
  117. {   int k;  
  118.     SqString str;  
  119.     str.length=0;  
  120.     if (i<=0 || i>s.length || i+j-1>s.length) //参数不正确时返回空串  
  121.         return str;  
  122.     for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到str  
  123.         str.data[k]=s.data[k];  
  124.     for (k=0;k<t.length;k++)        //将t.data[0..t.length-1]复制到str  
  125.         str.data[i+k-1]=t.data[k];  
  126.     for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到str  
  127.         str.data[t.length+k-j]=s.data[k];  
  128.     str.length=s.length-j+t.length;  
  129.     return str;  
  130. }  
  131. void DispStr(SqString s)  
  132. {   int i;  
  133.     if (s.length>0)  
  134.     {   for (i=0;i<s.length;i++)  
  135.             printf("%c",s.data[i]);  
  136.         printf("\n");  
  137.     }  
  138. }  
  139. #define MaxSize 100             //最多的字符个数  
  140. typedef struct  
  141. {   char data[MaxSize];         //定义可容纳MaxSize个字符的空间  
  142.     int length;                 //标记当前实际串长  
  143. } SqString;  
  144.   
  145. void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s  
  146. void StrCopy(SqString &s,SqString t);   //串t复制给串s  
  147. bool StrEqual(SqString s,SqString t); //判串相等  
  148. int StrLength(SqString s);  //求串长  
  149. SqString Concat(SqString s,SqString t);  //串连接  
  150. SqString SubStr(SqString s,int i,int j); //求子串  
  151. SqString InsStr(SqString s1,int i,SqString s2); //串插入  
  152. SqString DelStr(SqString s,int i,int j) ;   //串删去  
  153. SqString RepStr(SqString s,int i,int j,SqString t);     //串替换  
  154. void DispStr(SqString s);   //输出串  
  155. void Trans(SqString &s, char c1, char c2);  


运行结果:

0 0