问题 C: 字符串的查找删除
时间限制 : 1.000 sec 内存限制 : 32 MB
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入 Copy
in #include int main() { printf(" Hi "); }
样例输出 Copy
#clude tma() { prtf("Hi"); }
提示
1.将字符串中的In、IN、iN、in删除,所以要进行大小写匹配判断
2.要跳过空格
3.要循环接收删除指定字符串的字符串
solution
#include <cstdio>
#include <cstring>
int main()
{
char a[200],b[200];
gets(a);
int len1=strlen(a);
while(gets(b)!=NULL)
{
int len2=strlen(b);
for(int i=0;i<len2;i++)
{
if(b[i]==' ')//是空格就跳过
continue;
if(b[i]==a[0]||b[i]==a[0]+32||b[i]==a[0]-32) //大小写似做等同
{
i++;
int j=1;
while(j<len1&&i<len2&&(b[i]==a[j]||b[i]==a[j]+32||b[i]==a[j]-32))
{
i++;j++;
}
if(j==len1) //匹配,则不回退打印输出
{
i--; //一定要加上i--,因为i到了下一个要判断的位置,但是直接continue进入下一轮循环会i+1,所以i要先减1
continue;
}
else//不匹配,则回退
{
i=i-j; //回退到a[0]=b[i]时的位置
printf("%c",b[i]); //打印b[i],再进入下一轮判断
j=0;
}
}
else
printf("%c",b[i]);
}
printf("\n");
}
}