第八周项目三(3)

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


运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值