#include <iostream>
using namespace std;
string s;
int p1, p2, p3;
char tolower(char c) { //转换小写字母
if (c >= 'A' && c <= 'Z') {
c = c - 'A' + 'a';
}
return c;
}
char toupper(char c) { //转换大写字母
if (c >= 'a' && c <= 'z') {
c = c - 'a' + 'A';
}
return c;
}
int main() {
cin >> p1 >> p2 >> p3;
cin >> s;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '-') { //如果现在是-
if (s[i - 1] >= 'a' && s[i - 1] <= 'z' && s[i - 1] >= 'a' && s[i - 1] <= 'z' && s[i - 1] < s[i + 1]) {
//都是小写字母
if (s[i - 1] + 1 == s[i + 1]) { //顺序相邻
continue;
}
bool xx = false; //是否是*
bool cg = false; //顺序判断
if (p1 == 3) {
xx = true;
}
if (p3 == 2) {
cg = true;
}
if (cg) {
for (int i = s[i + 1] - 1; i > s[i - 1]; i--) { //逆序循环
for (int j = 0; j < p2; j++) { //个数控制
if (xx) {
cout << '*';
continue;
}
if (p1 == 1) {
cout << tolower(char(i)); //大写
} else if (p1 == 2) {
cout << toupper(char(i)); //小写
} //p1是3判断过了
}
}
} else {
for (int i = s[i - 1] + 1; i < s[i + 1]; i++) { //正序循环
for (int j = 0; j < p2; j++) { //个数控制
if (xx) {
cout << '*';
continue;
}
if (p1 == 1) {
cout << tolower(char(i)); //大写
} else if (p1 == 2) {
cout << toupper(char(i)); //小写
}
}
}
}
} else if (s[i - 1] >= '0' && s[i - 1] <= '9' && s[i - 1] >= '0' && s[i - 1] <= '9' && s[i - 1] < s[i + 1]) {
//是数字
if (s[i - 1] + 1 == s[i + 1]) { //相邻去掉-
continue;
}
bool xx = true; //是否输出*
bool cg = false; //正/逆序
if (p1 == 3) {
xx = true;
}
if (p3 == 2) {
cg = true;
}
if (cg) {
for (int i = s[i + 1] - 1; i > s[i - 1]; i--) {
for (int j = 0; j < p2; j++) {
if (xx) {
cout << '*';
continue;
}
cout << char(i); //数字不受大小写影响
}
}
} else {
for (int i = s[i - 1] + 1; i < s[i + 1]; i++) {
for (int j = 0; j < p2; j++) {
if (xx) {
cout << '*';
continue;
}
cout << char(i); //与上同
}
}
}
} else {
cout << s[i]; //若-前后字符不符合规则,直接输出
}
}
}
return 0; //结束
}
谢谢大佬