10-2. 删除字符串中的子串(20)

来源:互联网 发布:淘宝网卖家中心 - 首页 编辑:程序博客网 时间:2024/05/22 06:44
    题目:输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
    输入格式:输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
    输出格式:在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。


输入样例:
Tomcat is a male ccatat
cat
输出样例:

Tom is a male 

-------------------------------------------------------------------------------------

C语言做这个题时,大家想到的是用字符串的库函数,我们啥也不用,全自己写函数解答,也是一种练习。

#include <stdio.h>int StrLength(char *p)           //用于计算一个字符串长度的函数 {int i=0;while(p[i]!='\0'){i++;}return i;}int StrSearch(char *p,char *q)  // 计算字符串P里第一个含有字符串q位置数的函数 {                               int i,j,real=1,flag=0;      int m=StrLength(p);int n=StrLength(q);for(i=0;i<m-n+1;i++){if(p[i]==q[0]){for(j=1;j<n;j++){if(q[j]==p[i+j])real++;}if(real==n)return i;       //如果字符串P里含有字符串q,则返回第一个q前面的字符数  elsereal=1;}}return -1;                 ////如果字符串p里不含有字符串q,则返回-1  }void StrDelete(char *p,char *q)     //把字符串p中的字符串q全部删除的函数 {int x,i,j,m,n;m=StrLength(p);n=StrLength(q);x=StrSearch(p,q);while(x!=-1)                   {for(i=x;i<m-n+1;i++)       {p[i]=p[i+n];}m=StrLength(p);x=StrSearch(p,q);}}void GetStr(char *p)            //获取字符串的函数 {int i=0;char c;while(1){scanf("%c",&c);if(c=='\n'){p[i]='\0';break;}elsep[i]=c;i++;}}int main(){char str01[81],str02[81];GetStr(str01);GetStr(str02);StrDelete(str01,str02);printf("%s\n",str01);return 0;}


0 0
原创粉丝点击