一道字符串替换的题目。

题意:给你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. php empty函数

    empty — 检查一个变量是否为空. 当一个变量并不存在,或者它的值等同于FALSE,那么它就会被认为不存在.如果变量不存在的话,empty()并不会产生警告. 返回值: 当var存在,并且是一个非 ...

  2. Nginx反向代理模板

    nginx反向代理模板,修改nginx.conf #Basic reverse proxy server # upstream wcf{    server localhost:8080; #wcf1 ...

  3. jsf简介

    JSF实现了基于web的以下三个梦想 1.java程序员不必顾虑HTTP的细节,可以按照原本熟悉的事件驱动模型来设计后台系统,并通过一个能担保数据类型无误的数据传递接口将后台系统与前台界面结合在一起. ...

  4. Emoji表情符号录入MySQL数据库报错的解决方案(MySQL utf8与utf8mb4区别)

    本文转自:http://blog.itpub.net/26230597/viewspace-1243233/前言:手机app应用评论的时候,恢复表情符号,提示失败. 1,查看tomcat后台日志,核心 ...

  5. Git命令家底儿及Git数据通信原理详解

    http://geek.csdn.net/news/detail/72807?utm_source=tuicool&utm_medium=referral

  6. C# Winform 脱离 Framework (二)

    第一个Method: //启动应用程序 VOID RunApplication(LPTSTR lpFilename, LPTSTR args) { //WinExec(lpFilename, SW_S ...

  7. 【AngularJS】—— 10 指令的复用

    前面练习了如何自定义指令,这里练习一下指令在不同的控制器中如何复用. —— 来自<慕课网 指令3> 首先看一下一个小例子,通过自定义指令,捕获鼠标事件,并触发控制器中的方法. 单个控制器的 ...

  8. 【转】(笔记)CANopen协议【CANFestival】移植方法

    一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * ...

  9. Hadoop 面试题 之Hive

    1.Hive 有哪些方式保存元数据,各有哪些特点. 15. Hive内部表和外部表的区别 23.hive底层与数据库交互原理Hive的Hql语句掌握情况? 36.使用Hive或自定义mr实现如下逻辑: ...

  10. 【C语言入门教程】2.7 表达式

    表达式由运算符.常量及变量构成,C语言的表达式基本遵循一般代数规则.有几种运算法则是 C 语言表达式特有的. 2.7.1 表达式中的类型转换 同一表达式中的不同类型常量及变量在运算时需要变量为同一数据 ...