题意:给你一个字符串str1与替代其的字符串str2,然后给你一个串A,然后要你把A中出现str1的全部用str2替换,替换的方法是如果出现的一个马上替换,然后再从头找起,如果在串A中找不到当前的str1了,再换下一个str1。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node
{
char str1[500],str2[500];
}key[1000];
void fun(char*,int,int,char*);
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
char aim[1000]={0};
getchar();
memset(key,0,sizeof(key));
for(i=0;i<n;i++)
{
gets(key[i].str1);
gets(key[i].str2);
}
gets(aim);
for(i=0;i<n;i++)
{
bool flag=true;
while(flag)
{
int len=strlen(aim);
int pos=strstr(aim,key[i].str1)-aim;
if(pos>=0&&pos<len)
{
//printf("pos=%d\n",pos);
fun(aim,pos,pos+strlen(key[i].str1),key[i].str2);
}
else flag=false;
}
}
puts(aim);
}
return 0;
}
void fun(char *a,int be,int end,char *b)
{
char temp[1000]={0};
int len=strlen(a),t=0;
for(int i=end;i<len;i++)
{
temp[t++]=a[i];
}
len=strlen(b);
for(int i=0;i<len;i++)
{
a[i+be]=b[i];
}
for(int i=0;i<t;i++)
{
a[i+be+len]=temp[i];
}
a[t+be+len]='\0';
//printf("after change=%s\n",a);
}