UVA 10115 Automatic Editing(字符处理)

Text-processing tools like awk and sed allow you to automatically perform a sequence of editing operations based on a script. For this problem we consider the specific case in which we want to
perform a series of string replacements, within a single line of text, based on a fixed set of rules. Each rule specifies the string to find, and the string to replace 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 first rule. Replace the first occurrence of the find string within the text by the replace-bystring, then try to perform the same replacement again on
the new text. Continue until the find string no longer occurs within the text, and then move on to the next rule. Continue until all the rules have been considered. Note that (1) when searching for a find string, you always start searching
at the beginning of the text, (2) once you have finished using a rule (because the find string no longer occurs) you never use that rule again, and (3) case is significant.

For example, suppose we start with the line

banana boat

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

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

The input contains one or more test cases, followed by a line containing only 0 (zero) that signals the end of the file. Each test case begins with a line containing the number of rules, which will be between 1
and 10. Each rule is specified by a pair of lines, where the first line is the find string and the second line is the replace-by string. Following all the rules is a line containing the text to edit. For each test case, output a line containing
the final edited text.

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

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

Example input:

4
ban
bab
baba
be
ana
any
ba b
hind the g
banana boat
1
t
sh
toe or top
0

Example output:

behind the goat

shoe or shop

字符的替换。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
char s1[15][1100],s2[15][1100];
char str[1100];
bool solve(char str1[],char str2[],char str3[])
{
    char *p=strstr(str1,str2);
    if(p==NULL) return false;
    int len1=strlen(str1);
    int len2=strlen(str2);
    int len3=strlen(str3);
    int l=0;
    char temp[1100];
    for(int i=0;i<(p-str1);i++)
        temp[l++]=str1[i];
    for(int i=0;i<len3;i++)
        temp[l++]=str3[i];
    for(int i=(p-str1+len2);i<len1;i++)
        temp[l++]=str1[i];
    temp[l]='\0';
    strcpy(str1,temp);
    return true;
}
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        getchar();
        REP(i,n)
        {
            gets(s1[i]);
            gets(s2[i]);
        }
        gets(str);
        REP(i,n)
           while(solve(str,s1[i],s2[i]));
        puts(str);
    }
    return 0;
}
/*
4
ban
bab
baba
be
ana
any
ba b
hind the g
banana boat
1
t
sh
toe or top
0
*/

时间: 2024-10-05 04:42:55

UVA 10115 Automatic Editing(字符处理)的相关文章

UVa 10115 - Automatic Editing

题目:给你一些字符串的替换关系,以及一个句子.按顺序替换,输出最后结果. 分析:字符串.按照替换顺序依次替换(这个替换用过之后,就不再使用),每个替换可能出现多次. 这里注意,如果当前串中有多个可被当前单词替换的位置,只替换最前面的那个, 下次用本次生成的串替换,而不是整体一次性替换. 说明:注意数据清空. #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio>

Automatic Editing UVA 10115

#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

UVa 10361 Automatic Poetry

Automatic Poetry Input: standard input Output: standard output Time Limit: 2 seconds Memory Limit: 32 MB “Oh God”, Lara Croft exclaims, “it’s one of these dumb riddles again!” In Tomb Raider XIV, Lara is, as ever, gunning her way through ancient Egyp

小白书训练-Automatic Editing

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1056 题意:替换单词,这个题不难,但写题解想想就是泪啊TAT,最大要注意的地方就是要替换彻底,就是替换完之后如果可以替换接着替换,其次,一定要一个单词一个单词的替换. 剩下的看代码吧: #include <iostream> #include <stdio.h&g

UVA 10115 子符串替换

Text-processing tools like awk and sed allow you to automatically perform a sequence of editing operations based on a script. For this problem we consider the specific case in which we want to perform a series of string replacements, within a single

UVA 409 Excuses, Excuses! (字符处理)

Judge Ito is having a problem with people subpoenaed for jury duty giving rather lame excuses in order to avoid serving. In order to reduce the amount of time required listening to goofy excuses, Judge Ito has asked that you write a program that will

UVA 10340- All in All(字符串匹配)

Problem E All in All Input: standard input Output: standard output Time Limit: 2 seconds Memory Limit: 32 MB You have devised a new encryption technique which encodes a message by inserting between its characters randomly generated strings in a cleve

POJ1572 Automatic Editing 字符串替换,replace就够了

题意不难理解,但是一开始还是没有看清楚题目.Replace the first occurrence of the find string within the text by the replace-by string, then try to perform the same replacement again on the new text. Continue until the find string no longer occurs within the text, and then

【UVa】11212 Editing a Book(IDA*)

题目 题目 ? ? 分析 get一下IDA*的技巧,感觉总体来说不难,主要是剪枝比较难想. 这是lrj的代码,比较通俗易懂,关键就是选定一个区间再取出来,插入到一个位置,接下来转移到这个状态. ? ? 代码 #include <bits/stdc++.h> using namespace std; const int maxn=10; int n,a[maxn]; bool is_sorted() { for(int i=0;i<n-1;i++) if(a[i]>=a[i+1])