写得很急因为信息课时间太少,而且还含有重复判断条件,求大佬调,晚上改!!!
#include<bits/stdc++.h>
using namespace std;
int p1,p2,p3;
string a;
bool jdg(char x,char y){
if('a'<=x && x<='z') return 1;
else if('0'<=x && x<='9') return 1;
else if(x==y || x>y ) return 0;
return 0;
}
//小写-小写 或者 数字-数字,左边<右边,展开
//p1=1,字母小写,数字填充
//p1=2,字母大写,数字填充
//p1=3,字母星号,数字星号
//p2=k,每个字符填充k个
//p3=1,顺序 p3=2,逆序
//左边+1=右边,删除减号
//左边>=右边,保留减号
void zk(char x,char y){
if(p1==1){//小写,字母和数字都不用管
if(p3==1){//顺序
for(char i=x+1;i<=y-1;i++){//i是字符
for(int j=1;j<=p2;j++)
cout<<i;//指定个数
}//i是字符
}//顺序
else if(p3==2){//逆序
for(char i=y-1;i<=x+1;i++){//i是字符
for(int j=1;j<=p2;j++)
cout<<i;//指定个数
}//i是字符
}//逆序
}//小写
else if(p1==2){//大写,字母大写,数字不变
if(isdigit(x)&&isdigit(y)){//都是数字就直接复制
if(p3=1){//顺序
for(char i=x+1;i<=y-1;i++){//i是字符
for(int j=1;j<=p2;j++)
cout<<i;//指定个数
}//i是字符
}//顺序
else if(p3==2){//逆序
for(char i=y-1;i<=x+1;i++){//i是字符
for(int j=1;j<=p2;j++)
cout<<i;//指定个数
}//i是字符
}//逆序
}//都是数字就直接复制
else if(isalpha(x)&&isalpha(y)){//都是字母就全变大写
if(p3==1){//顺序
for(char i=x-32+1;i<=y-32-1;i++){//i是字符
for(int j=1;j<=p2;j++)
cout<<i;//指定个数
}//i是字符
}//顺序
else if(p3==2){//逆序
for(char i=y-32-1;i<=x-32+1;i++){//i是字符
for(int j=1;j<=p2;j++)
cout<<i;//指定个数
}//i是字符
}//逆序
}
}//大写
else if(p1==3){//星号
for(char i=x+1;i<=y-1;i++){
for(int j=1;j<=p2;j++){
cout<<'*';
}
}
}//星号
}
int main(){
cin>>p1>>p2>>p3>>a;
for(int i=0;i<a.length();i++){
if(a[i]=='-'){// a[i]=='-'
if(jdg(a[i-1],a[i+1])){//同为字母或数字
if(a[i-1]<a[i+1]){//a[i-1]严格<a[i+1]
zk(a[i-1],a[i+1]);//进行展开
}//a[i-1]严格<a[i+1]
}//同为字母或数字
else if(a[i-1]==a[i+1]) cout<<a[i];
else if(a[i-1]>a[i-1]) cout<<a[i];
}//a[i]=='-'
else cout<<a[i];
}
return 0;
}