求助#8数据,90分
查看原帖
求助#8数据,90分
934873
outlookal楼主2023/3/21 09:01
#include <iostream>
#include <string>
using namespace std;


int main() {
    int p1, p2, p3;
    string str;
    cin >> p1 >> p2 >> p3 >> str;
    if (str.size() == 0) return 0;
    int filnumber;
    for (int i = 0; i < str.size(); i++) {

        if (str[i] == '-') {
            // 只删除中间减号
            if (str[i - 1] + 1 == str[i + 1] && str[i - 1] != '-' && str[i + 1] != '-') continue;
            // 不删除
            if (str[i - 1] >= str[i + 1] && str[i - 1] != '-' && str[i + 1] != '-') {
                cout << str[i];
                continue;
            }

            filnumber = (str[i + 1] - str[i - 1] - 1) * p2;

            if (p1 == 3) {
                for (int j = 0; j < filnumber; j++) { cout << "*"; }
                continue;
            }

            if (isdigit(str[i - 1]) && isdigit(str[i + 1]) && str[i + 1] > str[i - 1]) {
                // 数字展开
                if (p3 != 1) {
                    // 正序
                    for (char j = str[i + 1] - 1; j > str[i - 1]; j--) for (int k = 0; k < p2; k++) cout << j;
                }
                else {
                    // 倒序
                    for (char j = str[i - 1] + 1; j < str[i + 1]; j++) for (int k = 0; k < p2; k++) cout << j;
                }
            }
            else if (islower(str[i - 1]) && islower(str[i + 1]) && str[i + 1] > str[i - 1]) {
                // 字母展开
                // 判大小写
                if (p1 == 2) {
                    // 大写
                    if (p3 != 1) {
                        // 倒序
                        for (char j = str[i + 1] - 1 - 32; j > str[i - 1] - 32; j--)for (int k = 0; k < p2; k++) cout << j;
                    }
                    else {
                        // 正序
                        for (char j = str[i - 1] + 1 - 32; j < str[i + 1] - 32; j++)for (int k = 0; k < p2; k++) cout << j;
                    }
                }
                else {
                    if (p3 != 1) {
                        // 倒序
                        for (char j = str[i + 1] - 1; j > str[i - 1]; j--)for (int k = 0; k < p2; k++) cout << j;
                    }
                    else {
                        // 正序
                        for (char j = str[i - 1] + 1; j < str[i + 1]; j++)for (int k = 0; k < p2; k++) cout << j;
                    }
                }
            }
            else {
                cout << str[i];
            }
        }
        else {
            cout << str[i];
        }

    }
    cout << endl;
    return 0;
}

2023/3/21 09:01
加载中...