第一个测试点和两个样例都在本地跑过了,答案都对得上。不知道为什么已提交全部都是WA......
求大佬救救QWQ
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>
using namespace std;
int main(void)
{
int flag1, flag2, flag3; // 分别表示大小写字母与星号、填充次数、是否逆序
cin >> flag1 >> flag2 >> flag3;
cin.ignore();
string original_str;
getline(cin, original_str);
int position;
position = original_str.find('-');
bool judge0 = (position != -1); // 寻址判断
bool judge1 = isdigit(original_str[position - 1]) && isdigit(original_str[position + 1]); // 同为数字判断
bool judge2 = isalpha(original_str[position - 1]) && isalpha(original_str[position + 1]); // 同为字母判断
bool judge3 = original_str[position + 1] - original_str[position - 1] > 0; // 严格递增判断
while(judge0 && (judge1 || judge2) && judge3) {
string change;
int first = position - 1, last = position + 1;
int len = original_str[last] - original_str[first] - 1; // 记录中间剩余字符的长度
if(len == 0) {
original_str.erase(position, 1);
judge0 = (position != -1);
judge1 = isdigit(original_str[position - 1]) && isdigit(original_str[position + 1]);
judge2 = isalpha(original_str[position - 1]) && isalpha(original_str[position + 1]);
judge3 = original_str[position + 1] - original_str[position - 1] > 0;
continue;
} // 相邻数特判
if(flag1 == 3) { // 星号特判
for(int i = 1; i <= len * flag2; i++) change.push_back('*'); // 直接填充len*flag2长度的*
original_str.replace(position, 1, change);
} else if(judge1) { // 数字特判
for(int i = 1; i <= len; i++) {
for(int j = 1; j <= flag2; j++) change.push_back(original_str[first] + i); //每次填充flag2次的首位数字+i
}
if(flag3 == 2) reverse(change.begin(), change.end());
original_str.replace(position, 1, change);
} else { // 最后判断字母
for(int i = 1; i <= len; i++) {
for(int j = 1; j <= flag2; j++) change.push_back(original_str[first] + i);
}
if(flag1 == 2) {
for(int i = 0; i < change.length(); i++) change[i] = toupper(change[i]);
}
if(flag3 == 2) reverse(change.begin(), change.end());
original_str.replace(position, 1, change);
}
position = original_str.find('-');
judge0 = (position != -1);
judge1 = isdigit(original_str[position - 1]) && isdigit(original_str[position + 1]);
judge2 = isalpha(original_str[position - 1]) && isalpha(original_str[position + 1]);
judge3 = original_str[position + 1] - original_str[position - 1] > 0;
}
cout << original_str << endl;
return 0;
}