Run ID:118201
提交时间:2025-04-26 10:51:18
#include <iostream> #include <string> #include <vector> using namespace std; // 生成展开后的子串 string expand(char start, char end, int p1, int p2, int p3) { string result; vector<char> chars; // 生成中间的字符序列 for (char c = start + 1; c < end; ++c) { chars.push_back(c); } // 如果需要逆序 if (p3 == 2) { reverse(chars.begin(), chars.end()); } // 根据 p1 决定填充字符 for (char c : chars) { if (p1 == 1) { // 填充小写字母或数字 for (int i = 0; i < p2; ++i) { result += c; } } else if (p1 == 2) { // 填充大写字母或数字 if (isalpha(c)) { for (int i = 0; i < p2; ++i) { result += toupper(c); } } else { for (int i = 0; i < p2; ++i) { result += c; } } } else if (p1 == 3) { // 填充星号 result += string(p2, '*'); } } return result; } int main() { int p1, p2, p3; cin >> p1 >> p2 >> p3; string input; cin >> input; string result; int n = input.length(); int i = 0; while (i < n) { if (i + 2 < n && input[i + 1] == '-' && (islower(input[i]) && islower(input[i + 2]) || isdigit(input[i]) && isdigit(input[i + 2])) && input[i + 2] > input[i]) { // 满足展开条件 result += input[i]; // 添加左边字符 result += expand(input[i], input[i + 2], p1, p2, p3); // 展开中间部分 result += input[i + 2]; // 添加右边字符 i += 3; // 跳过已处理的三个字符 } else { // 不满足展开条件,直接添加当前字符 result += input[i]; ++i; } } cout << result << endl; return 0; }