算是把sort函数玩明白了
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n, k; //n是字符串长度,k表示第k次操作
string a; //就是输入的字符串
string* ss; //用来装每次操作之后的a
string* operate; //存放操作说明,比如1 0 2 e
int iii;
//算出来的新字符串放到ss里面
string fun(string x) { //x是操作说明,比如1 0 2 e 都是字符,x[1]=' '
//1就是替换
if (x[0] == '1') {
string temp = a;
if (x[2] != '0') {
temp = fun(operate[int(x[2]) - int('1')]); //x[2]可以取0,1,2,3……
}
temp[int(x[4]) - int('1')] = x[6];
return temp;
}
//2就是删除,然后补位
else if (x[0] == '2') {
string temp = a; //先初始化为a
string afterward;
if (x[2] != '0') {
temp = fun(operate[int(x[2]) - int('1')]); //x[2]可以取0,1,2,3…… temp回来比如说是aca
}
afterward = temp.substr(int(x[4]) - int('0'), sizeof(temp));
string beyond = temp.substr(0, (int(x[4]) - int('1')));
return beyond + afterward;
}
}
bool sort_by_oder(const string& x, const string& y) { //返回true的时候,就会把x放在前面
if (iii == 0 || (x.length() > iii + 8 && y.length() > iii + 8 && x[iii - 1] == y[iii - 1])) {
if (x[iii] < y[iii]) {
return true;
}
}
return false;
}
bool sort_by_size(const string& x, const string& y) {
if (x.length() < y.length()) {
return true;
}
return false;
}
void sort_string() {
for (int i = 0; i < k; i++) {
ss[i] += "00000000000" + to_string(i + 1);
}
sort(ss, ss + k, sort_by_size); //先按大小排序,再按字母顺序排序
for (iii = 0; iii < n; iii++) { //每个位置都给排序一遍,第一个位置不一样的就不参与第二个位置的排序。
sort(ss, ss + k, sort_by_oder);
}
for (int i = 0; i < k; i++) {
//cout << ss[i] << " " << ss[i].length() << endl;
cout << ss[i][ss[i].length() - 1]<<" ";
}
}
int main() {
cin >> n >> a >> k;
ss = new string[k];
operate = new string[k];
cin.get(); //不写的话getline会以为上一个回车是自己的,什么毛病这是。。。
for (int i = 0; i < k; i++) {
getline(cin, operate[i]);
}
for (int i = 0; i < k; i++) {
ss[i] = fun(operate[i]);
}
sort_string();
return 0;
}