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 p;

 freopen("data","r",stdin);
 while(scanf("%d\n",&N)&&N){

  for(i=0;i<N;i++){
   gets(find[i]);
   gets(replace[i]);
  }
  gets(text);
  for(i=0;i<N;i++)
  while(Find(i,&p))   //反复查找find,知道text中不存在
   Replace(i,p);      //用replace替代找到的find

  printf("%s\n",text);
 }

 return 0;
}

int Find(int i,int* p){
 int j;
 for(j=0;j<strlen(text);j++) //查找text中是否有子串find,有则返回初始位置
  if(str_cmp(i,j)){
  *p=j;
  return 1;
  }

 return 0;
}

int str_cmp(int i,int j){ //比较函数
 int len=strlen(find[i]);
 int k;

 for(k=0;k<len;k++)
  if(find[i][k]!=text[j+k])
  return 0;

 return 1;
}

void Replace(int i,int p){
 int k,j;

 for(k=0;k<p;k++)//将find子串前的text中的字符放入暂存数组convert
 convert[k]=text[k];

 for(j=0;j<strlen(replace[i]);j++,k++)//接着将对应的replace放入
 convert[k]=replace[i][j];

 for(j=p+strlen(find[i]);j<=strlen(text);j++,k++)//放入text中find之后的字符
 convert[k]=text[j];//注意要将最后的'\0'也放入

 for(k=0;k<=strlen(convert);k++)//最后将convert复制回text,注意'\0'
 text[k]=convert[k];
}

Automatic Editing UVA 10115,布布扣,bubuko.com

时间: 2024-10-12 20:05:26

Automatic Editing UVA 10115的相关文章

UVa 10115 - Automatic Editing

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

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

小白书训练-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

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题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

UVa10115_Automatic Editing csdn(小白书字符串专题)

解题报告 题意: 替换字符串,一个单词可重复替换 思路: 这种题都很恶心. #include <iostream> #include <cstring> #include <cstdio> #include <map> using namespace std; char str[1000][1000],ch[1000][1000],sh[1000],str1[1000]; int main() { int n,i,j; while(~scanf("

寒假练习 02

今天刷了小白书的字符串专题,各种WA以及PE.UVaOJ中有时候会把PE判成WA,这样会导致很难查错. UVa 401 这道题目有个坑,只有表格中列出的才是镜像字母,没有列出了的表示没有镜像字母,在这上WA了一次. #include <iostream> #include <string> using namespace std; const char pAlphabet[] = { 'A', '*', '*', '*', '3', '*', '*', 'H', 'I', 'L',

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************