题解 | #字符串的展开#

字符串的展开

https://ac.nowcoder.com/acm/problem/16644

过了70

#include <iostream>
#include <algorithm>
using namespace std;
int p1,p2,p3;
string s;

bool check(char s1,char s2){
    if(s1 >= '0' && s2 <= '9' && s1 < s2) return true;
    if(s1 >= 'a' && s2 <= 'z' && s1 < s2) return true;
    return false;
}

int main(){
    cin >> p1 >> p2 >> p3;
    cin >> s;
    for(int i = 0;i < s.size();i++){
        if(s[i]=='-' && i!=s.size()-1 &&check(s[i-1],s[i+1])){
            string tmp;
            //不需要展开
            if(s[i-1]+1==s[i+1]) {
                s.erase(i,1);
                i--;
            }
            //需要展开
            else {
                //填充小写
                if(p1==1){
                    for(int k = 1;k < s[i+1]-s[i-1];k++){
                        for(int j = 0;j < p2;j++) tmp+=s[i-1]+k;
                    }
                    if(p3==2) reverse(tmp.begin(),tmp.end());
                    s.replace(i,1,tmp);
                }
                 //填充大写
                else if(p1==2){
                    for(int k = 1;k < s[i+1]-s[i-1];k++){
                        for(int j = 0;j < p2;j++) tmp+=s[i-1]+k-65;
                    }
                    if(p3==2) reverse(tmp.begin(),tmp.end());
                    s.replace(i,1,tmp);
                }
                else{
                    //填充*
                    for(int k = 1;k < s[i+1]-s[i-1];k++){
                        for(int j = 0;j < p2;j++) tmp+='*';
                    }
                    s.replace(i,1,tmp);
                }
            }
        }
    }
    cout << s;
}
全部评论

相关推荐

09-11 03:07
已编辑
湖南大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务