zoukankan      html  css  js  c++  java
  • FZU 2122——又见LKity——————【字符串匹配、暴力】

    Problem 2122 又见LKity

    Accept: 407    Submit: 1413
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

     Problem Description

    嗨!大家好,在TempleRun中大家都认识我了吧。我是又笨又穷的猫猫LKity。很高兴这次又与各位FZU的ACMer见面了。最近见到FZU的各位ACMer都在刻苦地集训,整天在日光浴中闲得发慌的我压力山大呀!于是,我准备为诸位编写一款小工具——LKity牌文本替换(众怒,:敢不敢更土点!)。这个小工具可以帮助诸位替换代码中的变量等功能,真心是一款编程,刷题必备的神器。其功能如下:

    将给定的字符序列中所有包含给定的子串替换成另外一个给定的字符串。为了让其功能更加强大,替换过程中,将忽略大小写。并且不进行递归替换操作。

    不过,作为笨笨的猫猫,我是心有余而力不足呀!希望诸位ACMer能帮我实现哈。(众FZU的ACMer:”……”);

     Input

    输入包含多组数据。 输入为标准输入,输入包含3行。 第一行为需要查找的字符串S1。S1仅由大写或者小写字母组成,且其长度在区间[1,,100]内。 第二行为要替换的字符串S2。S2由[32,125]的字符组成,且其长度在区间[1,100]内。 第三行为原始字符串S,S由[32,125]的字符组成。且其长度在区间[1,50,000]内。

     Output

    对于每组数据,请输出替换后的字符串。

     Sample Input

    abc
    bc ab
    aaa aaabca 333Abcc##

     Sample Output

    aaa aabc aba 333bc abc##

     Source

    福州大学第十届程序设计竞赛
     
    解题思路:用两个指针i,j分别指向txt数组和p数组,txt中如果有匹配到的p数组,就输出来。否则就回退i指针到最开始匹配的位置。  
    被自己坑了两三个小时,也是醉了。
     
    #include<stdio.h>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #include<string>
    using namespace std;
    const int maxn = 1e5+200;
    char p[1020],txt[maxn],rpl[1020];
    bool jud(char a, char b){
        if(a == b){
            return true;
        }else{
            if(a>='a'&&a<='z'){
                if(b>='A'&&b<='Z'){
                    if(a-32 == b)
                    return true;
                }
            }
            if(a>='A'&&a<='Z'){
                if(b>='a'&&b<='z'){
                    if(a+32 == b)
                        return true;
                }
            }
        }
        return false;
    }
    int main(){
        while(gets(p)!=NULL){
            gets(rpl);
            gets(txt);
            int lenp = strlen(p);
            int lenr = strlen(rpl);
            int lent = strlen(txt);
            int i , j;
            for(i = 0, j = 0; i < lent; i++){
                if(jud(p[j],txt[i])){
                    j++;
                    if(j == lenp){
                        for(int k = 0; k < lenr; k++){
                            printf("%c",rpl[k]);
                        }
                        j = 0;
                    }
                }else{
                    i -= j;     //回退i指针
                    j = 0;
                    printf("%c",txt[i]);
                }
            }
            for(int k = lent-j; k < lent; k++){
                printf("%c",txt[k]);
            }
            puts("");
        }
        return 0;
    }
    
    /*
    aab
    kk
    AAAB
    aab
    kk
    abaa
    
    */
    

      

  • 相关阅读:
    18-10-11 关于触发器的学习
    18-10-29 关于设计器机器人等安装遇到的问题的解决方法
    18-10-25 全局函数测试总结 创建时间的目录 网页获取数据 写入数据
    18-09-08 关于Linux 的安装遇到的一些小坑
    18-08-27 机器人自动化之页面表格数据的定位拾取
    day 96 关于分页的使用
    day73 母版 中间件
    通过 U 盘启动重装 macOS 系统
    MAMP 环境下为 php 添加 pcntl 扩展
    使用 Composer 安装 Laravel 框架
  • 原文地址:https://www.cnblogs.com/chengsheng/p/5340093.html
Copyright © 2011-2022 走看看