1808 Problem C 字符串的查找删除

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a845717607/article/details/89395554

问题 C: 字符串的查找删除

时间限制: 1 Sec  内存限制: 32 MB

题目描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入

in
#include 
int main()
{

printf(" Hi ");
}

样例输出

#clude
tma()
{

prtf("Hi");
}

提示

注:将字符串中的In、IN、iN、in删除。

经验总结

可以分两步,第一步,先将所有的空格给删除,第二步,进行搜索字符串中是否存在需要删除的字符串,这里有两种方法,一种是暴力枚举,另一种是KMP模式匹配,这一题后台字符串都很短,所以采用第一种就可以了~

AC代码

#include <cstdio>
#include <cctype>
#include <cstring>
const int maxn=400;
bool Judge(char a,char b)
{
	return tolower(a)==tolower(b)?1:0;
}
void Predispose(char a[])
{
	char temp[maxn]={'\0'};
	int len=0;
	for(int i=0;a[i]!='\0';i++)
		if(a[i]!=' ')
			temp[len++]=a[i];
	for(int i=0;i<strlen(a);i++)
		a[i]=temp[i];
}
void SearchAndDelete(char a[],char n[])
{
	int flag=0;
	for(int i=0;i<strlen(a);i++)
	{
		if(Judge(a[i],n[0])==1)
		{
			for(int j=0;j<strlen(n);j++)
			{
				if(Judge(a[i+j],n[j])==1)
					flag=1;
				else
				{
					flag=0;
					break;
				}
			}
		}
		if(flag==1)
		{
			int len1=strlen(n);
			int len2=strlen(a)-len1;
			for(int j=i;j<len2;j++)
				a[j]=a[j+len1];
			a[len2]='\0';
			i--;
			flag=0;
		}	
	}
}
int main()
{
	char str[maxn],norm[maxn];
	scanf("%s",norm);
	getchar();
	while(gets(str))
	{
		Predispose(str);
		SearchAndDelete(str,norm);
		printf("%s\n",str);
	}
	return 0;
}  

猜你喜欢

转载自blog.csdn.net/a845717607/article/details/89395554
今日推荐