思路

将分类讨论各种可能性,把所有的可能性列出来。

// 当“-”前后字符为数字时按照规则去掉"-"号插入数字或者“*”号或者逆序表示;
std::string intoDigit(int p1,int p2,int p3,char first,char last)
// 当“-”前后字符为字母时按照规则去掉"-"号插入字母或者“*”号,或者逆序表示;
std::string intoCharacter(int p1,int p2,int p3,char first,int last)
// 顺序遍历输入的字符串,判断各类情况
void changeAString(int p1,int p2,int p3,const std::string &originString,std::string &newString)

#代码


#include <iostream>
#include <string>
#include <algorithm>


std::string intoDigit(int p1,int p2,int p3,char first,char last)
{
    int interval=last-first;
    std::string intoString;
    if(p1==3)
    {
        for(int i=1;i<interval;i++)
        {
            for(int j=0;j<p2;j++)
            {
                intoString+='*';
            }
        }
    }
    else
    {
        for(int i=1;i<interval;i++)
        {
            for(int j=0;j<p2;j++)
            {
                intoString+=(first+i);
            }
        }
    }
    if(p3==2) reverse(intoString.begin(),intoString.end());
    
    return intoString;
}

std::string intoCharacter(int p1,int p2,int p3,char first,int last)
{
    int interval=last-first;
    std::string intoString;
    if(p1==1)
    {
        // if(first>='A'&&first<='Z') first+=32;
        for(int i=1;i<interval;i++)
        {
            for(int j=0;j<p2;j++)
            {
                intoString+=(first+i);
            }
        }
    }
    else if(p1==2)
    {
        // if(first>='a'&&first<='z') 
        first-=32;
        //std::cout<<first<<std::endl;
        for(int i=1;i<interval;i++)
        {
            for(int j=0;j<p2;j++)
            {
                intoString+=(first+i);
            }
        }
    }
    else
    {
        for(int i=1;i<interval;i++)
        {
            for(int j=0;j<p2;j++)
            {
                intoString+='*';
            }
        }
    }
    if(p3==2)
    {
        reverse(intoString.begin(),intoString.end());
    }
    return intoString;
}

void changeAString(int p1,int p2,int p3,const std::string &originString,std::string &newString)
{
    int length=originString.size();
    if(length<=2) newString=originString;
    // std::cout<<length<<std::endl;
    newString+=originString[0];
    // std::cout<<newString[0]<<std::endl;
    for(int i=1;i<length-1;i++)
    {
        // std::cout<<newString<<std::endl;
        newString+=originString[i];
        if(originString[i]=='-')
        {
           char first=originString[i-1];
           char last=originString[i+1];
           // std::cout<<aString.at(i-1)<<std::endl;
           if(first>='0'&&first<='9')
           {
               if(last>='0'&&last<='9')
               {
                   if(last-first==1) newString.pop_back();
                   if(last-first>1)
                   {
                       // std::cout<<"START"<<": "<<newString<<std::endl;
                       std::string tempString;
                       // std::cout<<"MIDDLE1"<<": "<<newString<<std::endl;
                       tempString=intoDigit(p1, p2,p3, first,last);
                       // std::cout<<"MIDDLE2"<<": "<<newString<<std::endl;
                       // newString.erase(i);
                       // std::cout<<"MIDDLE"<<": "<<newString<<std::endl;
                       // std::cout<<tempString<<std::endl;
                       newString.pop_back();
                       newString+=tempString;
                       // std::cout<<newString<<std::endl;
                   }
               }
           }
           if(first>='a'&&last<='z')
           {
               // std::cout<<first<<std::endl;
               if(last>='a'&&last<='z')
               {
                   if(last-first==1) newString.pop_back();
                   if(last-first>1)
                   {
                       std::string tempString;
                       tempString=intoCharacter(p1, p2, p3,first,last);
                       newString.pop_back();
                       newString+=tempString;
                   }
               }
           }
        }
    }
    newString+=originString[length-1];
}

int main()
{
    int p1,p2,p3;
    std::string aString;
    
    std::cin>>p1>>p2>>p3;
    //std::cout<<std::endl;
    std::cin>>aString;
    std::string newString;
    changeAString(p1,p2,p3,aString,newString);
    std::cout<<newString<<std::endl;
}