70pts求调
查看原帖
70pts求调
936407
Oldxu114514楼主2025/7/18 20:14
#include <iostream>
#include <cctype>
#include <string>
using namespace std;

int main() {
    int p1, p2, p3;
    string s;
    cin >> p1 >> p2 >> p3;
    cin >> s;
    string result = "";

    for (int i = 0; i < s.length(); i++) {
        if (s[i] != '-') {
            result += s[i];
        } else {
            // 处理减号在开头或结尾的情况
            if (i == 0 || i == s.length() - 1) {
                result += '-';
                continue;
            }

            char left = s[i-1];
            char right = s[i+1];

            // 检查是否为同类字符(数字或小写字母)且右>左
            if ((isdigit(left) && isdigit(right) && right > left) || 
                (islower(left) && islower(right) && right > left)) {
                
                // 处理连续字符(如d-e)
                if (right == left + 1) {
                    // 跳过减号(不添加到结果)
                    continue;
                }

                string fill = "";
                if (p1 == 3) {
                    // 星号填充
                    fill = string((right - left - 1) * p2, '*');
                } else {
                    // 顺序填充
                    if (p3 == 1) {
                        for (char c = left + 1; c < right; c++) {
                            char ch = c;
                            if (p1 == 2 && islower(ch)) {
                                ch = toupper(ch);
                            }
                            fill += string(p2, ch);
                        }
                    } 
                    // 逆序填充
                    else if (p3 == 2) {
                        for (char c = right - 1; c > left; c--) {
                            char ch = c;
                            if (p1 == 2 && islower(ch)) {
                                ch = toupper(ch);
                            }
                            fill += string(p2, ch);
                        }
                    }
                }
                result += fill;
            } else {
                // 不满足展开条件,保留减号
                result += '-';
            }
        }
    }

    cout << result << endl;
    return 0;
}
2025/7/18 20:14
加载中...