求调,样例全过不知道为啥爆零了
查看原帖
求调,样例全过不知道为啥爆零了
1502406
jerry_lee123楼主2024/12/24 23:28
#include<iostream>
#include<cstring>
using namespace std;

int main(){
    //首先,需要先把参数和原来的字符串存下来
    int p1 = 0, p2 = 0, p3 = 0;
    cin >> p1 >> p2 >> p3;
    char a[110];
    char s[2];
    cin.getline(s, 1);
    cin.getline(a, 100);
    //接下来需要判定是否展开字符串,那么,应该先找个数组存最后的字符串
    char out[1000];
    char *py = a;//指向原来字符串的指针
    char *po = out;//指向输出字符串的指针
    //接下来对应每个情况进行填充,如果后一位没有'-'号,则直接拷贝到输出字符串,如果有,再看后两位与本位的关系进行判断
    while(true){//结束情况复杂内部进行判断
        if(*(py + 1) != '-') *(po++) = *(py++);//此处也指明,后面我们的边界是strlen(a) - 1
        else{
            if(*(py + 2) <= *py) *(po++) = *(py++);
            else if(*(py + 2) - *py == 1){
                *po = *py;
                *(po + 1) = *(py + 1);
                *(po + 2) = *(py + 2);
                po += 3;
                py += 3; 
            }
            else{//此处开始字符串展开操作
                *(po++) = *(py++);//首先先把这个位置存了
                char temp;//先对应p3,如果为1则存成左边开头,如果为2则存成右边开头
                    if(p3 == 1){
                        char temp = *(py - 1) + 1;
                        if(isalpha(temp)){
                            if(p1 == 1) temp = tolower(temp);
                            else if(p1 == 2) temp = toupper(temp);
                        }
                        while(tolower(temp) != tolower(*(py + 1))){
                            for(int i = 0; i < p2; i++){
                                if(p1 != 3) *(po++) = temp;
                                else if(p1 == 3) *(po++) = '*';
                            }
                            temp += 1;
                        }
                        *(po++) = *(py + 1);
                        py += 2;
                    }
                    else{
                        char temp = *(py + 1) - 1;
                        if(isalpha(temp)){
                            if(p1 == 1) temp = tolower(temp);
                            else if(p1 ==2) temp = toupper(temp);
                        }
                        while(tolower(temp) != tolower(*(py - 1))){
                            for(int i = 0; i < p2; i++){
                                if(p1 != 3) *(po++) = temp;
                                else if(p1 == 3) *(po++) = '*';
                            }
                            temp -= 1;
                        }
                        *(po++) = *(py + 1);
                        py += 2;
                    }
            } 
        }
        if(*py == a[strlen(a)]) break;
    }
    *(po) = '\0';
    cout << out << endl;
}

2024/12/24 23:28
加载中...