让我们的IDE智能起来! (10分)

题目描述

小Z一直苦于自己使用的IDE不够智能,没法帮他写代码(划掉)帮他纠正代码中的错误。于是他打算自行实现一个智能的IDE,现在请你完成其中一个功能:给你指定的起始字符串begin和终止字符串end,请你在文本串text中将每一对begin和end之间(不含自身)的字符全部替换为目标串aim,begin和end的配对原则为:最左侧的begin与其右侧最近的end优先生效,之后寻找其右侧下一个begin继续应用此规则。每个begin或end只能就近生效一次。

输入格式:

输入共两行,第一行为文本串text(len<10^​6​​ )。
第二行为三个字符串,使用空格分隔,分别为begin、end及aim,均有len<100。

输出格式:

一行一个字符串,text按规则替换后的结果。

输入样例:

aaabvvbbesesbbaabbz
aa bb 123

输出样例:

aa123bbesesbbaa123bbz

样例解释:

第一对aa和bb将中间的abvv替换为123,第二对aa和bb将空字符串替换为123。

源代码

#include <stdio.h>   //begin是一个特殊的东西
#include <string.h>
int main()
{
    
    
    char text[1100010],place[3000010];
    char begin[110],end[110],aim[110];
    char ch;
    int t=0;
    int value;
    ch=getchar();
    while(ch!='\n')
    {
    
    
        text[t]=ch;
        t++;
        ch=getchar();
    }
    int current=0;
    scanf("%s %s %s",begin,end,aim);
    int len=strlen(text);
    int lenbegin=strlen(begin);
    int lenend=strlen(end);
    int lenaim=strlen(aim);
    int arr[len],i,num=0,j;
    int pair1=0,pair=0;
    for(i=0;i<len;i++)
        arr[i]=0;    
    for(i=0;i<len;i++)
    {
    
    
        if(text[i]==begin[0]&&pair1!=1)
        {
    
    
            int m=1;
            current=1;
            for(j=i+1;j<i+lenbegin;j++)
            {
    
    
                if(text[j]==begin[m++])
                    current++;                    
            }
            if(current==lenbegin)
            {
    
    
                for(j=i;j<i+lenbegin;j++)
                {
    
    
                    arr[j]=1;
                }
                if(i+lenbegin<len)
                    i=i+lenbegin-1;    //不要忘记-1 因为下次循环开始后 i++
                pair1=1;
            }
            current=0;
        }
        else if(text[i]==end[0])
        {
    
    
            int m=1;
            current=1;
            for(j=i+1;j<i+lenend;j++)
            {
    
    
                if(text[j]==end[m++])
                    current++;
            }
            if(current==lenend&&pair1==1)
            {
    
    
                value=i;
                for(j=i;j<i+lenend;j++)
                {
    
    
                    arr[j]=2;
                }
                if(i+lenend<len)
                    i=i+lenend-1;      //不要忘记-1 因为下次循环开始后 i++
                pair1=0;
                pair++;
            }
            current=0;
        }
    }
    int startnum[pair],endnum[pair];
    j=0;
    int q=0;
    if(pair1==1)
    {
    
    
        for(i=value+lenend;i<len;i++)
        {
    
    
            arr[i]=0;
        }
    }
    for(i=0;i<len;i++)
    {
    
    
        if(arr[i]==1)
        {
    
    
            startnum[j++]=i;
            i=i+lenbegin-1;
        }
        else if(arr[i]==2)
        {
    
    
            endnum[q++]=i;
            i=i+lenend-1;
        }
    } 
    j=0;q=0;
    int k=0;
    for(i=0;i<len;i++)
    {
    
    
        if(i!=startnum[j])
        {
    
    
            place[k++]=text[i];
        }
        else if(i==startnum[j])
        {
    
    
            while(q<lenbegin)
            {
    
    
                place[k++]=begin[q];
                q++;
            }
            q=0;
            while(q<lenaim)
            {
    
    
                place[k++]=aim[q];
                q++;
            }
            q=0;
            while(q<lenend)
            {
    
    
                place[k++]=end[q];
                q++;
            }
            q=0;
            i=endnum[j]+lenend-1;
            j++;            
        }
    }
    for(i=0;i<k;i++)
        printf("%c",place[i]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_49930465/article/details/113177713
今日推荐