#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
时间: 2024-10-12 20:05:26