poj 1572
一道字符串替换的题目。
题意:给你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的更多相关文章
- POJ 1572 Automatic Editing 字符串替换,replace就够了
题意不难理解,但是一开始还是没有看清楚题目.Replace the first occurrence of the find string within the text by the replace ...
- POJ题目排序的Java程序
POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目分类(转)
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
随机推荐
- 在VS2013中强制IIS Express应用程序池使用经典模式
直接在文件夹地址栏输入 %userprofile%\documents\iisexpress\config\applicationhost.config 会打开上边的配置文件 将 <siteDe ...
- ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers
阅读目录 序言 内置的HTML Helpers 创建自定义的Helpers 使用静态方法创建Helpers 使用扩展方法创建Helpers 创建Fluent Helpers 创建自动闭合的Helper ...
- .NET Core、DNX、DNU、DNVM、MVC6学习资料
一.资源 1.http://dotnet.github.io/ 2.http://www.codeproject.com/Articles/1005145/DNVM-DNX-and-DNU-Under ...
- Jedis 例子(demo)大全
第一步:到git下载jedis源码,如果你用maven或者gradle,那么直接下官方的即可,地址:https://github.com/xetorthio/jedis:如果你用ant,下载这个:ht ...
- [Asp.Net]获取客户端ip和mac地址
摘要 有时候,我们需要获取客户端的一些信息,以便进行统计.比如:客户端的唯一标识,ip等信息 IP 通过获取HTTP_X_FORWARDED_FOR,或者REMOTE_ADDR可以获取客户端的ip. ...
- Hibernate 应用
完善的持久化层应该达到以下目标: 1.代码可重用性高,能够完成所有的数据库访问操作. 2.如果有需要的话,能够支持多种数据库平台. 3.具有相对独立性,当持久化层的实现发生变化,不会影响上层的实现. ...
- 【8-18】JS学习01
Source : http://www.w3school.com.cn/html 外部的 JavaScript 也可以把脚本保存到外部文件中.外部文件通常包含被多个网页使用的代码. 外部 JavaSc ...
- JSF的CommandXxx组件的update用法总结
Update all forms 1 update="@(form)" Update first form 1 update="@(form:first)" U ...
- ubuntu系统下更新jdk版本
1. 添加软件源 sudo add-apt-repository ppa:webupd8team/java 2. 更新软件源 sudo apt-get update 3. 安装 jdk1.8 sudo ...
- MYSQL 连接数据库命令收藏
一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:\>mysql -h localhost -u root -p123 二. ...