UVa 10115 Automatic Editing

來源:互聯網
上載者:User

標籤:style   blog   http   java   color   strong   

字串題目就先告一段落了,又是在看balabala不知道在說些什麼的英語。

演算法也很簡單,用了幾個庫函數就搞定了。本來還擔心題裡說的replace-by為空白的特殊情況需要特殊處理,後來發現按一般情況處理也能A過去。

第一次RE是因為char t[]開小了。

對了,strstr()函數我也是第一次用,對這個函數不太瞭解的同學,召喚傳送門!

C語言中字串操作之 strstr()

題目大意:給幾組要尋找的和要替換的字串,和一段text,進行尋找替換。說白了就是word裡面尋找替換功能。

不過需要注意的一點就是Find被替換完以後可能會出現新的Find子串,即Find可能被替換多次。

Problem E: Automatic Editing
Source file: autoedit.{c, cpp, java, pas}
Input file: autoedit.in
Output file: autoedit.out

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-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 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 thefind 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:

4banbabbababeanaanyba bhind the gbanana boat1tshtoe or top0

Example output:

behind the goatshoe or shop

 

AC代碼:

 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6  7 char Find[11][85],  Replace[11][85]; 8 char text[260]; 9 10 int main(void)11 {12     #ifdef LOCAL13         freopen("10115in.txt", "r", stdin);14     #endif15     int N;16     while(scanf("%d", &N) == 1 && N)17     {18         getchar();19         int i;20         for(i = 0; i < N; ++i)21         {22             gets(Find[i]);23             gets(Replace[i]);24         }25         memset(text, 0, sizeof(text));26         gets(text);27         28         char *s, t[260];//一開始開的85,然後RE了29         for(i = 0; i < N; ++i)30         {31             while(s = strstr(text, Find[i]))//一個Find[i]可能要被替換多次32             {33                 strcpy(t, s + strlen(Find[i]));//把後面需要串連的字串先暫存在t裡面34                 *s = ‘\0‘;35                 //if(strlen(Replace[i]))// strlen(Replace[i]) == 0 按一般情況處理即可36                 //{37                     strcat(text, Replace[i]);//串連需要替換的字串38                     strcat(text, t);        //串連最後的小尾巴39                 //}40                 //else41                     //strcat(text, t);42             }43         }44 45         cout << text << endl;46     }47     return 0;48 }
代碼君

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.