B2135 单词替换 (变式)

原题地址
更改:改为someone中的one也能被替换

#include<bits/stdc++.h>
using namespace std;
char s[210],a[110],b[110];
int la,lb,ls,nowtop,nowend=-1,nowoutput=1;
int main()
{
    while(1)
    {
        char now_input;
        scanf("%c",&now_input);
        if(now_input=='\n')
            break;
        s[++ls]=now_input;
    }
    while(1)
    {
        char now_input;
        scanf("%c",&now_input);
        if(now_input=='\n')
            break;
        a[++la]=now_input;
    }
    while(scanf("%c",&b[++lb])!=EOF)
    {
    }
    lb--;
    //cout<<ls<<" "<<la<<" "<<lb<<endl;
    for(int i=1;i<=ls;i++)
    {
        if(a[1]==s[i]&&nowend!=i-1)
        {           
            nowtop=i;//nowtop是指当前查找单词的起点对应句子s中的坐标
        }
        nowend=i;//nowend是指当前查找单词的终点对应句子s中的坐标
        if(a[i-nowtop+1]==s[i])
        {
            if(nowend-nowtop+1==la)
            {
               for(int j=1;j<=lb;j++)
                {
                   cout<<b[j];
                }
                nowend=i+1;
                nowtop=i+1;
                nowoutput=i+1;
            }
            continue;
        }
        else
            nowtop=i+1;//以免中间不匹配还在比较后面的,比如ome与one 如果不加这个就会继续比较第三个,发现仍然匹配,然后把ome当作one。
            //而设置为i+1(即下次循环的i)的目的是,使下一次循环的a[i-nowtop+1]直接变回a[1],相当于重新比较了
        if(nowoutput==0)//nowoutput是想记录下次输出从s的哪个坐标开始
            nowoutput++;
        for(int j=nowoutput;j<=nowend;j++)
        {
            cout<<s[j];
        }
        nowoutput=nowend+1;//记录下一次输出的起始点:nowend+1      
    }
    return 0;
}    
posted @ 2024-01-30 13:09  G_A_TS  阅读(44)  评论(0编辑  收藏  举报