一道字符串替换的题目。

题意:给你2*n组字符串,一个是规则,一个是替换的结果。

字符串的题目,确实麻烦,有些细节不处理好就是wa。

这里我提供1组数据

intput

1

abcdef

a

abcdef

1

ab

ababab

output

a

<empty line>

 #include <stdio.h>
#include <string.h>
#include <iostream> using namespace std; int next[100][300];
char rule[100][100],rep[100][300],ans[300],tmp[300]; void makenext(int i) //kmp求next数组。
{
int q,k;
int m = strlen(rule[i]);
next[i][0] = 0;
for (q = 1,k = 0; q < m; ++q)
{
while(k > 0 && rule[i][q] != rule[i][k])
k = next[i][k-1];
if (rule[i][q] == rule[i][k])
{
k++;
}
next[i][q] = k;
}
} void clea()
{
memset(rule,0,sizeof(rule[0]));
memset(rep,0,sizeof(rep[0]));
memset(next,0,sizeof(next[0]));
memset(tmp,0,sizeof(tmp));
memset(ans,0,sizeof(ans));
} int main()
{
int n;
while(scanf("%d",&n),n!=0)
{
clea();
getchar();
for(int i=0;i<n;i++)
{
gets(rule[i]);
gets(rep[i]);
makenext(i);
}
gets(ans);
for(int i=0;i<n;i++)
{
int len=strlen(ans),len2=strlen(rep[i]),len3=strlen(rule[i]),j=0,q=0;
for(j=0;j<len;j++)
{
while(q>0&&ans[j]!=rule[i][q])
q=next[i][q-1];
if(ans[j]==rule[i][q])
q++;
if(len3==q)
{
memset(tmp,0,sizeof(tmp));
for(int m=0;m<=len-len3+len2;m++) //替换。这里处理相对麻烦,尤其是等号的问题。
{
if(m<=j-q) tmp[m]=ans[m];
else if(m<=j-q+len2){
for(int p=0;p<len2;p++,m++)
tmp[m]=rep[i][p];
m--;}
else tmp[m]=ans[++j];
}
strcpy(ans,tmp);
j=-1;
q=0;
len=strlen(ans);
}
}
}
printf("%s\n",ans);
}
return 0;
}

poj 1572的更多相关文章

  1. POJ 1572 Automatic Editing 字符串替换,replace就够了

    题意不难理解,但是一开始还是没有看清楚题目.Replace the first occurrence of the find string within the text by the replace ...

  2. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  3. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  4. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  5. poj分类

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  6. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  7. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  8. POJ题目分类(转)

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  9. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

随机推荐

  1. 轻取帝国CMS管理员密码

    “帝国”CMS是一套著名的PHP整站程序,是国内使用人数最多的PHPCMS程序之一.令人无奈的是,“帝国”虽然把势力壮大了,却忽略了自身防护的建设,结果在黑客攻击下,“帝国”沦陷了.“帝国”CMS曝出 ...

  2. Python之路【第三篇补充】:Python基础(三)

    参考老师:http://www.cnblogs.com/wupeiqi lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 ...

  3. navicat linux 破解

    破解方法一.     navicat linux版本有一个月的试用期, 当过了试用期以后, 不能再进入. 但其实只要将~下.navicat目录下的system.reg文件删掉, 重新启动navicat ...

  4. Python 文件遍历

    Python具备强大的解析能力,其中列表解析甚至可以作用在某些并非实际存储的序列上,任何可遍历对象都可以,包括可自动逐步读取的文件. 例如下面的代码将会从逐行读取一个文本文件,并且在每一行的最后加上一 ...

  5. 导出Excel之Epplus使用教程1(基本介绍)

    1.前言 目前Epplus的介绍中文资料很少,我也一直在摸索中使用它,以下是我在使用过程中得到的经验,写出来供大家参考.本系列共4章: 导出Excel之Epplus使用教程1(基本介绍) 导出Exce ...

  6. MessageFormat用法

    MessageFormat用来格式化一个消息,通常是一个字符串,比如: String str = "I'm not a {0}, age is {1,number,short}", ...

  7. 响应性web设计实战总结(二)

    响应性web设计实战总结(二) 阅读目录 背景知识: Gulp-less安装及配置如下 对响应性web总结,之前总结过2篇文章:可以看如下: http://www.cnblogs.com/tugenh ...

  8. java 练手 谁是最好的Coder

    Problem A 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB   描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所 ...

  9. win7下搭建web服务器

    简介 微软为了操作系统的安全,默认把web.ftp等服务默认关闭了,重新打开也非常简单. step 1 打开控制面板: step 2: step 3: step 4: 单击确定之后等个几分钟,web服 ...

  10. cocoapods pod install 安装报错 is not used in any concrete target

    低版本的cocoa pods在编写Podfile文件时这样写就可以了 platform :ios, '8.0'pod 'AFNetworking' 高版本的cocoa pods在编写Podfile文件 ...