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类型常会遇到的问题,判断字符串的结束'\0'
#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]!='\0'; 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]!='\0'; k++) { que.push(temp[k]); } for(int k=i+len; str[k]!=-1&&str[k]!='\0'; 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; }