不是WA就是RE的蒟蒻求助
查看原帖
不是WA就是RE的蒟蒻求助
323183
CLCK楼主2020/8/28 17:07
#include <iostream>
using namespace std;
string s;
int p1, p2, p3;
char tolower(char c) { //转换小写字母
    if (c >= 'A' && c <= 'Z') {
        c = c - 'A' + 'a';
    }
    return c;
}
char toupper(char c) { //转换大写字母
    if (c >= 'a' && c <= 'z') {
        c = c - 'a' + 'A';
    }
    return c;
}
int main() {
    cin >> p1 >> p2 >> p3;
    cin >> s;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '-') { //如果现在是-
            if (s[i - 1] >= 'a' && s[i - 1] <= 'z' && s[i - 1] >= 'a' && s[i - 1] <= 'z' && s[i - 1] < s[i + 1]) {
            	//都是小写字母
                if (s[i - 1] + 1 == s[i + 1]) { //顺序相邻
                    continue;
                }
                bool xx = false; //是否是*
                bool cg = false; //顺序判断
                if (p1 == 3) {
                    xx = true;
                }
                if (p3 == 2) {
                    cg = true;
                }
                if (cg) {
                    for (int i = s[i + 1] - 1; i > s[i - 1]; i--) { //逆序循环
                        for (int j = 0; j < p2; j++) { //个数控制
                            if (xx) {
                                cout << '*';
                                continue;
                            }
                            if (p1 == 1) {
                                cout << tolower(char(i)); //大写
                            } else if (p1 == 2) {
                                cout << toupper(char(i)); //小写
                            } //p1是3判断过了
                        }
                    }
                } else {
                    for (int i = s[i - 1] + 1; i < s[i + 1]; i++) { //正序循环
                        for (int j = 0; j < p2; j++) { //个数控制
                            if (xx) {
                                cout << '*';
                                continue;
                            }
                            if (p1 == 1) {
                                cout << tolower(char(i)); //大写
                            } else if (p1 == 2) {
                                cout << toupper(char(i)); //小写
                            }
                        }
                    }
                }
            } else if (s[i - 1] >= '0' && s[i - 1] <= '9' && s[i - 1] >= '0' && s[i - 1] <= '9' && s[i - 1] < s[i + 1]) {
            	//是数字
                if (s[i - 1] + 1 == s[i + 1]) { //相邻去掉-
                    continue;
                }
                bool xx = true; //是否输出*
                bool cg = false; //正/逆序
                if (p1 == 3) {
                    xx = true;
                }
                if (p3 == 2) {
                    cg = true;
                }
                if (cg) {
                    for (int i = s[i + 1] - 1; i > s[i - 1]; i--) {
                        for (int j = 0; j < p2; j++) {
                            if (xx) {
                                cout << '*';
                                continue;
                            }
                            cout << char(i); //数字不受大小写影响
                        }
                    }
                } else {
                    for (int i = s[i - 1] + 1; i < s[i + 1]; i++) {
                        for (int j = 0; j < p2; j++) {
                            if (xx) {
                                cout << '*';
                                continue;
                            }
                            cout << char(i); //与上同
                        }
                    }
                }
            } else {
                cout << s[i]; //若-前后字符不符合规则,直接输出
            }
        }
    }
    return 0; //结束
}

谢谢大佬

2020/8/28 17:07
加载中...