ZZULI_SummerPractice(4) POJ 1572…

来源:互联网 发布:mac mail qq企业邮箱 编辑:程序博客网 时间:2024/04/29 19:34
Automatic Editing
Time Limit: 1000MSMemory Limit: 10000KTotal Submissions: 1040Accepted: 471

Description

Text-processing tools like awkand sed allow you to automatically perform a sequence of editingoperations based on a script. For this problem we consider thespecific case in which we want to perform a series of stringreplacements, within a single line of text, based on a fixed set ofrules. Each rule specifies the string to find, and the string toreplace it with, as shown below.

Rule Find Replace-by
1.ban bab
2.baba be
3.ana any
4.ba b hind the g

To perform the edits for a given line of text, start with the firstrule. Replace the first occurrence of the find string within thetext by the replace-by string, then try to perform the samereplacement again on the new text. Continue until the find stringno longer occurs within the text, and then move on to the nextrule. Continue until all the rules have been considered. Note that(1) when searching for a find string, you always start searching atthe beginning of the text, (2) once you have finished using a rule(because the find string no longer occurs) you never use that ruleagain, and (3) case is significant.

For example, suppose we start with the line

banana boat

and apply these rules. The sequence of transformations is shownbelow, where occurrences of a find string are underlined andreplacements are boldfaced. Note that rule 1 was used twice, thenrule 2 was used once, then rule 3 was used zero times, and thenrule 4 was used once.

Before After
banana boat babana boat
babana boat bababa boat
bababa boat beba boat
beba boat behind the goat

Input

The input contains one or moretest cases, followed by a line containing only 0 (zero) thatsignals the end of the file. Each test case begins with a linecontaining the number of rules, which will be between 1 and 10.Each rule is specified by a pair of lines, where the first line isthe find string and the second line is the replace-by string.Following all the rules is a line containing the text toedit.

Output

For each test case, output aline containing the final edited text.

Both find and replace-by strings will be at most 80 characterslong. Find strings will contain at least one character, butreplace-by strings may be empty (indicated in the input file by anempty line). During the edit process the text may grow as large as255 characters, but the final output text will be less than 80characters long.

The first test case in the sample input below corresponds to theexample shown above.

Sample Input

4banbabbababeanaanyba bhind the gbanana boat1tshtoe or top0

Sample Output

behind the goatshoe or shop

Source

Mid-Central USA 1999
题意比较好理解,就是按照“字典”里的字符串进行替换,但是要注意一点,就是替换后要从头开始扫描,不然你会WA到崩溃的。
代码:
#include<stdio.h>
#include<string.h>
char rule[15][85];
char replace[15][85];
char txt[500];
void Strrev(char s[])
{
char ss[500];
int i,j,len;
len=strlen(s);
j=0;
for(i=len-1;i>=0;i--)
ss[j++]=s[i];
ss[j]=0;
strcpy(s,ss);
}
int check(int j,int i)
{
int a,b;
a=0;b=j;
while(rule[i][a]!=0){
if(rule[i][a]==txt[b])
{
a++;b++;
}
else return 0;
}
return 1;
}
void place(int j,int i)
{
int len1,len2;
char str[500];
len2=strlen(txt);
len1=strlen(rule[i]);
txt[j]=0;
strcpy(str,txt);
strcat(str,replace[i]);
txt[j]=rule[i][0];
Strrev(txt);
txt[len2-(j+len1)]=0;
Strrev(txt);
strcat(str,txt);
strcpy(txt,str);
}
int main()
{
int n,i,j;
while(scanf("%d",&n),n)
{
getchar();
for(i=0;i<n;i++)
{
gets(rule[i]);
gets(replace[i]);
}
gets(txt);
for(i=0;i<n;i++)
{
for(j=0;txt[j];j++)
{
if(txt[j]==rule[i][0]&&check(j,i))
{ place(j,i);
j=-1;
}
}
}
puts(txt);
}
return 0;
}

原创粉丝点击