//未通过!
#include <stdio.h>
#include <string.h>
int main()
{
char rules[2][15][85],edit[260],output[260];
int n;
while(scanf("%d",&n) && n!=0)
{
getchar();
for(int i=0;i<n;i++)
{
gets(rules[0][i]);
gets(rules[1][i]);
}
gets(edit);
for(int i=0;i<n;)//使用两个循环更好一些,外循环i递变,内循环历编直至无一匹配为止
{
int elen=strlen(edit),rlen=strlen(rules[0][i]);
int j,k;
int flag=0;
for(j=0,k=0;j<=elen-rlen && k<rlen;)
{
if(edit[j]==rules[0][i][k])
{j++;k++;}
else
{
j=j-k+1;
k=0;
}
}
if(k==rlen)
{
flag=1;
int w=0;
for(int u=0;u<elen;)
{
if(u==j-rlen)
{
for(int v=0;rules[1][i][v];v++)
output[w++]=rules[1][i][v];
u=j;
}
else
output[w++]=edit[u++];
}
output[w]='\0';
strcpy(edit,output);
}
if(flag==0)
i++;
}
printf("%s\n",edit);
}
return 0;
}
///
string类的应用
erase();删除
insert();插入
begin();首地址
zize();大小
find();返回匹配位置
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
while(cin>>n && n)
{
getchar();
string origin[17],replace[17];
for(int i=1;i<=n;i++)
{
getline(cin,origin[i]);
getline(cin,replace[i]);
}
string text;
getline(cin,text);
for(int i=1;i<=n;i++)
{
int find;
while((find=text.find(origin[i]))!=string::npos)
{
text.erase(text.begin()+find,text.begin()+find+origin[i].size());
text.insert(find,replace[i]);
}
}
cout<<text<<endl;
}
return 0;
}