字符串水题
就是查找和替换 有相等的就替换 否者换用下一个规则 用过的规则不能再用
#include<cstdio>
#include<cstring>
struct STR
{
char f[90];
char r[90];
int f_len,r_len;
}str[10];
char words[300],result[300];
int T,w_len;
int Replace(int i)
{
int flag = 0,k,j,visit;
for(j = 0; j < w_len; j++)
{
visit = j;//后面修改了j的值所以必须标记下
for(k = 0; words[j]==str[i].f[k]&&k < str[i].f_len;k++,j++);
if(k == str[i].f_len)//有相等的字符串就替换
{
flag = 1;
int l,t = 0;
for(l = j-k; t < str[i].r_len; l++,t++)
result[l] = str[i].r[t];//把替换的字符串加到result上
for(;j < w_len ; j++,l++)
result[l] = words[j];//把words串被替换以后的字符加到result上
result[l] = '\0';
strcpy(words,result);//更新字符串
w_len = strlen(words);//更新长度
}
j = visit;//当前判断的位置
}
if(flag)return 1;
return 0;//当前规则以不能再用了;
}
void Solve()
{
for(int i = 0; i < T; i++)
while(Replace(i))Replace(i);
}
int main()
{
#if LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
int N;
while((scanf("%d\n",&N),N)!=0)
{
T = 0;
for(; T < N; T++)
{
gets(str[T].f);str[T].f_len = strlen(str[T].f);
gets(str[T].r);str[T].r_len = strlen(str[T].r);
}
gets(words);
strcpy(result,words);
w_len = strlen(words);
Solve();
puts(result);
}
}