首先看题目
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
输出样例:(注意"male"后有一空格)
Tom is a male
AC程序如下:
#include <stdio.h>
#include <string.h>
#define MAXN 88
int main()
{
int n, i;
char strs[MAXN] = { 0 }, strc[MAXN] = { 0 };
char* l;
gets(strs);
gets(strc);//读字符串
n = strlen(strc);//测量子串长度
while (l = strstr(strs, strc))//使用库函数strstr,返回子串的指针
{
for (i = 0; *(l + i); i++)//从子串起始元素开始进行移动,直到遇到0。注意不要越界
{
*(l + i) = *(l + i + n);//隔n元素向前移动字符串
}
}
puts(strs);//输出处理后的字符串
return 0;
}
本题难度虽然不高,理清思路后能够较快解决,但是对于初学者而言,不使用自带的strstr函数求解较为困难,PTA还是给了20分的比重,主要还是在于明确和记住常用的库函数定义(例如此题中的strstr,返回的是子串的指针,即母串中存在的第一个子串的首元素地址,没有找到子串时即返回NULL(0),通过这一特点我们可以很方便地完成操作)。