小明的字符串

正文索引 [隐藏]

题目描述:

小明同学需要对一个长度为 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;
}