hiho 1082 : 然而沼跃鱼早就看穿了一切

时间:2021-03-03 08:44:21

描述

hiho 1082 : 然而沼跃鱼早就看穿了一切

fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区分大小写)。为了使句子不缺少成分,统一换成 “fjxmlhx” 。

输入

输入包括多行。

每行是一个字符串,长度不超过200。

一行的末尾与下一行的开头没有关系。

输出

输出包含多行,为输入按照描述中变换的结果。

样例输入
The Marshtomp has seen it all before.
marshTomp is beaten by fjxmlhx!
AmarshtompB
样例输出
The fjxmlhx has seen it all before.
fjxmlhx is beaten by fjxmlhx!
AfjxmlhxB



#include <iostream>
#include <string.h>
#define MAX (200+1)


using namespace std;

char* replace(char str[],char reg[], char info[]);
int compareStr(char str1[], char str2[]);


int main(void)
{
	char buffer[MAX];
	char reg[] = "marshtomp";
	char info[] = "fjxmlhx";
	while(gets(buffer)!=NULL){
		printf("%s\n",replace(buffer,reg,info));
	}
	return 0;
}

char* replace(char str[],char reg[], char info[]){
	char temp[MAX];
	int end = strlen(str) - strlen(reg); 
	int regLen = strlen(reg);
	int infoLen = strlen(info);
	int inIdx = 0;
	int i = 0;
	while(i<=end){
		if(compareStr(str+i,reg)){
			strcpy(temp+inIdx,info);
			inIdx+=infoLen;
			i+=regLen;
		}else{
			temp[inIdx++] = str[i++];
		}
	}

	while(str[i]){
		temp[inIdx++] = str[i++];
	}
	
	temp[inIdx] = '\0';
	strcpy(str,temp);

	return str;

}

int compareStr(char str1[], char str2[]){
	char compareC;
	for(int i=0; i<strlen(str2);i++){
		compareC = tolower(str1[i]);
		if(str2[i]-compareC) return 0;
	}
	return 1;
}