小明的字符串
题目描述:
小明同学需要对一个长度为 N 的字符串进行处理,他需要按照要求执行若干步骤,每个步骤都均为下面 2 种操作中的一种,2 种操作如下:
TYPE 1. 从字符串结尾开始算起,将第 X 个字符之前的字符移动到字符串末尾
TYPE 2. 输出字符串索引为 X 的字符
小明尝试了很久没能完成,你可以帮他解决这个问题吗?
输入描述:
第一行,包含两个整数,字符串的长度 N 和操作次数T; 第二行为要操作的原始字符串; 之后每行都是要执行的操作类型 TYPE 和操作中 X 的值,均为整数。 输入范围: 字符串长度 N:1 <= N <= 10000 操作次数 T:1 <= T <= 10000 操作类型 TYPE:1 <= TYPE<= 2 变量 X:0 <= X < N。
输出描述:
操作的执行结果。
输入样例:
6 2 xiaomi 1 2 2 0
输出样例:
m
解题思路:
小米校招的字符串水题。若输入的type是1,则用substr将倒数第x个字符前的字符全部截取并移动到字符串末尾;若type不为1,则将字符串的第x个字符进行输出。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int N,T; //字符串长度N,操作次数T
cin >> N >> T;
cin.ignore(); //cin后用getline前一定要ignore吃回车
string str;
getline(cin,str);
while(T--)
{
int type,x;
cin >> type >> x;
if(type == 1) //type=1将字符串的倒数第x字符前的字符全移动到字符串末尾
{
string t = str.substr(0,str.length()-x);
//cout << t << endl;
str = str.substr(str.length()-x,x) + t;
//cout << str << endl;
}
else //type=2将字符串的第x个字符进行输出
{
cout << str[x] << endl;
}
}
return 0;
}
还没有任何评论,你来说两句吧!