需要处理的条件颇多,需细心

#include<iostream>
#include<cctype>
#include<algorithm>
using namespace std;
int p1,p2,p3;
string s,ans;
int main(){
    cin>>p1>>p2>>p3>>s;
    int l=s.size();
    for(int i=0;i<l;i++){
        if(i!=0&&i!=l-1)
            if(s[i]=='-'){
                string s2;
                if(s[i-1]>=s[i+1]){
                    ans.push_back('-');
                    continue;
                }
                if(s[i-1]+1==s[i+1])continue;
                if(isalpha(s[i-1])&&isalpha(s[i+1]));
                else if(isdigit(s[i-1])&&isdigit(s[i+1]));
                else {
                    ans.push_back('-');
                    continue;
                }
                for(char j=s[i-1]+1;j<=s[i+1]-1;j++){
                    for(int k=1;k<=p2;k++){
                        if(p1==1){
                            if(isalpha(s[i-1])&&isalpha(s[i+1])){
                                s2.push_back(tolower(j));
                            }else{
                                s2.push_back(j);
                            }
                        }else if(p1==2){
                            if(isalpha(s[i-1])&&isalpha(s[i+1])){
                                s2.push_back(toupper(j));
                            }else{
                                s2.push_back(j);
                            }                            
                        }else if(p1==3){
                            s2.push_back('*');
                        }
                    }
                }
                if(p3==2)reverse(s2.begin(),s2.end());
                ans.append(s2);
            }
            else ans.push_back(s[i]);
        else ans.push_back(s[i]);
    }
    cout<<ans;
    return 0;
}