hust训练赛20160330--B - 又见LKity

Problem 2122 又见LKity

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

abcbc abaaa aaabca 333Abcc##

 Sample Output

aaa aabc aba 333bc abc##

     同学说我写博客都是粘上题目和代码,这样没什么意思,其实我并不认同,虽然他们都是直接把想法思路写上,

但写博客的主要目的一是为了以后可以经常看看,回顾以前做题的经历重温一下刷题的心得体会,而是别人也可以看看题解代码,虽然不一定做过这道题,至少交流一下想法,或是提出更好的思路。

    

         这道题以为要用kmp,却一时心急忘了分析数据范围并不是很大,直接暴力也就是百万级的数据,不会超时,就这样浪费了一个水题,,不过值得注意的是输入得用gets(),而输出用scanf就好了,puts()输出会额外有一个换行,,然后逐一比较就可以了,如果符合的话直接输出第二个字符串,否则将单个字符输出;

             

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<ctype.h>
using namespace std;
const int N=60000+10;
char  a[105],b[105],c[N];
int f;
int jud(char x,char y)
{
    if(x==y)
      return 1;
    if(x>=65&&x<=122)
        if(y>=65&&y<=122)
        if(x+32==y||x-32==y)
        return 1;
    return 0;
}//大小写可以忽略;
int main()
{
    int x1,x3,i,j;
    while(gets(a),gets(b),gets(c))
    {
        x1=strlen(a);
        x3=strlen(c);
        if(x3<x1)
            puts(a);
        else
        {
            for(i=0; i<x3; i++)
            {
                int k=i;
                if(jud(c[k],a[0]))//只要有一个符合,然后往下比较;
                    for(j=1,k++; j<x1; k++,j++)
                    {
                        if(!jud(a[j],c[k]))
                        {
                            printf("%c",c[i]);
                            break;
                        }
                        if(j==x1-1)//全部符合的情况;
                        {
                           printf("%s",b);
                           i+=x1-1;//长度为x1的一部分被替换了,i应该往前移x1-1个单位,进行下一次循环;
                        }
                    }
                else
                    printf("%c",c[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

   

转载于:https://www.cnblogs.com/nyist-TC-LYQ/p/7208292.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值