既然是模拟,那就要对所有特殊情况进行处理,所有特殊情况如下:
- 开头和结尾的‘-’,如“-a-d-”
- 连续的‘-’,如“---”
- 数字和字母之间的‘-’,如“1-a”
- ‘-’左侧的字符大于右侧的,如“d-a”
上面的特殊情况,如果有一个满足,那就将‘-’看作普通的字符,将其原样复制到ans字符串中即可。
若都不满足的话,那就将其看作特殊字符串,调用solution函数进行处理。
下面是代码
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int p1, p2, p3;
string str, ans;
string solution(char l, char r) {
string s;
int k = p2;
for (char i = l + 1; i < r; ++i) {
for (int j = 0; j < k; ++j) {
if (p1 == 1) {
s+=tolower(i);
}
if (p1 == 2) {
s += toupper(i);
}
else if (p1 == 3) {
s += '*';
}
}
}
if (p3 == 1) return s;
else {
string t;
for (int i = s.size() - 1; i >= 0; --i) {
t += s[i];
}
return t;
}
}
int main() {
cin >> p1 >> p2 >> p3;
cin >> str;
for (int i = 0; i < str.size(); ++i) {
//遍历到‘-’后,开始检测所有的特殊情况
if (str[i] == '-' && i - 1 >= 0 && i + 1 < str.size() && str[i - 1] != '-' && str[i + 1] != '-' && str[i + 1] > str[i - 1] && abs(str[i + 1] - str[i - 1]) <= 26)
ans += solution(str[i - 1], str[i + 1]);
else ans += str[i];
}
cout << ans << endl;
return 0;
}