zoukankan      html  css  js  c++  java
  • BUPT复试专题—串查找(?)

    https://www.nowcoder.com/practice/a988eda518f242c29009f8620f654ede?tpId=67&tqId=29642&rp=0&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking

    题目描述

        读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1、翻转  从下标为i的字符开始到i+len-1之间的字符串倒序;2、替换  命中如果第一位为1,用命令的第四位开始到最后的字符串替换原读入的字符串下标 i 到 i+len-1的字符串。每次执行一条命令后新的字符串代替旧的字符串(即下一条命令在作用在得到的新字符串上)。     命令格式:第一位0代表翻转,1代表替换;第二位代表待操作的字符串的起始下标int i;第三位表示需要操作的字符串长度int len。

    输入描述:

    输入有多组数据。
    每组输入一个字符串(不大于100)然后输入n,再输入n条指令(指令一定有效)。

    输出描述:

    根据指令对字符串操作后输出结果。
    示例1

    输入

    bac
    2
    003
    112as

    输出

    cab
    cas



    反转替换按照题目的要求来,需要注意的是string类型常会遇到的问题,判断字符串的结束''
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<queue>
    using namespace std;
    int main()
    {
        string str;
        str.resize(100);
        for(int k=0; k<100; k++) //初始化
            str[k]=-1;
        while(scanf("%s",&str[0])!=EOF)
        {
            int num;
            scanf("%d",&num);
            while(num--)
            {
                string temp;
                temp.resize(100);
                for(int k=0; k<100; k++) //初始化
                    temp[k]=-1;
    
                scanf("%s",&temp[0]);
                queue<char> que;
                int i=temp[1]-'0';
                int len=temp[2]-'0';
                int h=3;
                if(temp[0]=='0')
                {
                    reverse(str.begin()+i,str.begin()+i+len);
                    for(int k=0; str[k]!=-1&&str[k]!=''; k++)
                    {
                        que.push(str[k]);
                    }
                    int m=0;
                    for(int k=0; k<100; k++) //初始化
                        str[k]=-1;
                    while(que.size())
                    {
                        str[m++]=que.front();
                        cout<<que.front();
                        que.pop();
                    }
                    cout<<endl;
                }
                else if(temp[0]=='1')
                {
                    while(temp[h]!=-1&&str[h]!=' ')
                    {
                        h++;
                    }
                    for(int k=0; k<i; k++)
                    {
                        que.push(str[k]);
                    }
                    string git;
                    git.resize(100);
                    for(int k=0; k<100; k++) //初始化
                        git[k]=-1;
                    for(int k=3; temp[k+1]!=-1&&str[k+1]!=''; k++)
                    {
                        que.push(temp[k]);
                    }
                    for(int k=i+len; str[k]!=-1&&str[k]!=''; k++)
                    {
                        que.push(str[k]);
                    }
                    int m=0;
                    for(int k=0; k<100; k++) //初始化
                        str[k]=-1;
                    while(que.size())
                    {
                        str[m++]=que.front();
                        cout<<que.front();
                        que.pop();
                    }
                    cout<<endl;
                }
                for(int k=0; k<100; k++) //初始化
                    temp[k]=-1;
            }
            for(int k=0; k<100; k++) //初始化
                str[k]=-1;
        }
        return 0;
    }
  • 相关阅读:
    grep用法小结
    观察者模式
    类之间的关系
    Linux——makefile编写
    探索C++多态和实现机理
    进程间通信——管道
    C++继承引入的隐藏与重写
    Linux 文件读写操作与磁盘挂载
    xShell终端下中文乱码问题
    深入理解C++ new/delete, new []/delete[]动态内存管理
  • 原文地址:https://www.cnblogs.com/dzzy/p/8260681.html
Copyright © 2011-2022 走看看