#include <stdio.h>
#include <string.h>
#define MAXL 225+5
#define MAXN 10+5
char find[MAXN][MAXL],replace[MAXN][MAXL];
char text[MAXL],convert[MAXL];
int Find(int,int*);
void Replace(int,int);
int str_cmp(int,int);
int main(){
int N,i,j,k;
int p;
freopen("data","r",stdin);
while(scanf("%d\n",&N)&&N){
for(i=0;i<N;i++){
gets(find[i]);
gets(replace[i]);
}
gets(text);
for(i=0;i<N;i++)
while(Find(i,&p)) //反复查找find,知道text中不存在
Replace(i,p); //用replace替代找到的find
printf("%s\n",text);
}
return 0;
}
int Find(int i,int* p){
int j;
for(j=0;j<strlen(text);j++) //查找text中是否有子串find,有则返回初始位置
if(str_cmp(i,j)){
*p=j;
return 1;
}
return 0;
}
int str_cmp(int i,int j){ //比较函数
int len=strlen(find[i]);
int k;
for(k=0;k<len;k++)
if(find[i][k]!=text[j+k])
return 0;
return 1;
}
void Replace(int i,int p){
int k,j;
for(k=0;k<p;k++)//将find子串前的text中的字符放入暂存数组convert
convert[k]=text[k];
for(j=0;j<strlen(replace[i]);j++,k++)//接着将对应的replace放入
convert[k]=replace[i][j];
for(j=p+strlen(find[i]);j<=strlen(text);j++,k++)//放入text中find之后的字符
convert[k]=text[j];//注意要将最后的'\0'也放入
for(k=0;k<=strlen(convert);k++)//最后将convert复制回text,注意'\0'
text[k]=convert[k];
}Automatic Editing UVA 10115,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u011915301/article/details/38177627