[cpp]
/**本題含義是將前一個串轉化為後一個串,當前一個串
*完全找不到後,再去比較下一個串,直到所有串被替換完畢
*/
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 256
//替換
void replace(char *a, char *b, int pos) {
for(int i=0; i<strlen(a); i++) {
b[pos++] = a[i];
}
}
//查找子串
int findSon(char *s1, char *s2, int &start, int &end) {
int j, i1;
for(int i=0; i<strlen(s2); i++) {
i1 = i;
for(j=0; j<strlen(s1); j++) {
if(s1[j]!=s2[i1++]) break;
}
if(j==strlen(s1)) {
start = i; end = i+j-1; return 1;
}
}
return 0;
}
int main(int argc, char const *argv[]) {
int cas, start, end, len, flag;
char data[MAX];
char word[MAX][MAX];
while(cin>>cas,cas!=0) {
getchar();
for(int i=0; i<2*cas; i+=2) {
gets(word[i]);
gets(word[i+1]);
}
gets(data);
for(int i=0; i<2*cas; i+=2) {
flag = 1;
while(flag) {
flag = findSon(word[i], data, start, end);
len = strlen(word[i])-strlen(word[i+1]);
//flag標識是否還存在可替換的串,下面代碼為字符串替換,沒有使用庫函數
if(flag) {
if(len<0) {
len = -len;
for(int i=strlen(data); i>end; i--) {
data[i+len] = data[i];
}
} else if(len>0) {
for(int i=end-len+1; i<strlen(data); i++) {
data[i] = data[i+len];
}
}
replace(word[i+1], data, start);
}
}
}
puts(data);
}
return 0;
}