(PTA)删除字符串中的子串(提供详细知识点)

Author:MiFkuF
微电子科学与工程 理科男
代码部分是老师提供的PTA答案,其余部分原创。

输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

输入格式:

输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

输出格式:

在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例:

Tomcat is a male ccatat
cat

输出样例:

Tom is a male 

知识点:

**strstr函数:**返回字符串中首次出现子串的地址。若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例:

strstsr("MiFkuF is a student.","kuF");
输出:
kuF is a student.

strcpy函数:把从str2地址开始且含有NULL结束符的字符串复制到以str1开始的地址空间。
例:

strcpy(str1,str2);
极为将str2复制给str1

**strcat函数:**把str2所指向的字符串(包括“\0”)复制到str1所指向的字符串后面(删除str1原来末尾的“\0”)。要保证str1足够长,以容纳被复制进来的*str2。
例:

strcat("MiF","kuF is a student.")
输出:
MiFkuF is a student.

代码

#include
#include
int main()
{
  char s1[100];
  gets(s1);
  char s2[100];
  gets(s2);
  char t[100];//临时数组
  char *p;//用来存放strstr函数成功寻找后返回的地址 
  while((p=strstr(s1,s2))!=NULL)//若返回值不等于NULL,就开始删除操作
  {
    strcpy(t,p+strlen(str2))//p需要加上s2的长度来跳过被删除的子串,将之后的字符串拷贝至临时数组 
    *p='\0';//把p目前指向的字符变为'\0',用来下一步实现strcat函数 (*p指向s1,TOM之后均为'\0')
    strcat(s1,t);//将临时数组接在s1的终止符之后(即p的位置)
  }
  puts(s1);
  return 0;
}

最后欢迎各位大佬纠错。

你可能感兴趣的:(PTA)