您的位置:首页 > 编程语言 > C语言/C++

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

2015-08-11 20:22 435 查看
   
题目:输入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前面的字符数
else
real=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;
}
else
p[i]=c;
i++;
}
}

int main()
{
char str01[81],str02[81];
GetStr(str01);
GetStr(str02);
StrDelete(str01,str02);
printf("%s\n",str01);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息