70pts 求调 -已解决

题面

#include <bits/stdc++.h>
using namespace std;


int p1,p2,p3;
string s;
//当p3 = 1时输出
void output1() {
    for(int i = 0;i < s.size();i++) {
        if(s[i] != '-') {
            cout << s[i];
            continue;
        }
        //判断开头结尾是否一样
        bool start = (s[i - 1] >= '0' && s[i - 1] <= '9');
        bool stop = (s[i + 1] >= '0' && s[i + 1] <= '9');
        if(start ^ stop || s[i - 1] == s[i + 1] || s[i + 1] < s[i - 1]) {
            cout << s[i];
            continue;
        }
        for(int j = s[i - 1] + 1;j < s[i + 1];j++) {
            char out;
            if(p1 == 3) {
                out = '*';
            }
            else if(start) {
                out = j;
            }
            else if(p1 == 1) {
                if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
                    out = j;
                }
                else {
                    out = j + 32;
                }
            }
            else if(p1 == 2) {
                if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
                    out = j - 32;
                }
                else {
                    out = j;
                }
            }
            for(int k = 1;k <= p2;k++) {
                cout << out;
            }
        }
    }
}
//当p3 = 2时输出
void output2() {
    for(int i = 0;i < s.size();i++) {
        if(s[i] != '-') {
            cout << s[i];
            continue;
        }
        //判断开头结尾是否一样
        bool start = (s[i - 1] >= '0' && s[i - 1] <= '9');
        bool stop = (s[i + 1] >= '0' && s[i + 1] <= '9');
        if(start ^ stop || s[i - 1] == s[i + 1] || s[i + 1] < s[i - 1]) {
            cout << s[i];
            continue;
        }
        //反向输出
        for(int j =s[i + 1] - 1;j > s[i - 1];j--) {
            char out;
            if(p1 == 3) {
                out = '*';
            }
            else if(start) {
                out = j;
            }
            else if(p1 == 1) {
                if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
                    out = j;
                }
                else {
                    out = j + 32;
                }
            }
            else if(p1 == 2) {
                if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
                    out = j - 32;
                }
                else {
                    out = j;
                }
            }
            for(int k = 1;k <= p2;k++) {
                cout << out;
            }
        }
    }
}


int main(){
    cin >> p1 >> p2 >> p3;
    cin >> s;
    if(p3 == 1) {
        output1();
        return 0;
    }
    output2();
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
09-03 17:49
已编辑
四川大学 供应链管理
迷茫的大四🐶:提前实习有些坑的,卡毕业后薪资以及能力不达预期提前违约这种
我的OC时间线
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务