50分求助,自己检测发现顺序输出时只有最后一位字母,逆序输出是最后一位字母多输出一次(蒟蒻不会做题,只会模拟)
/*
Name:字符串的展开
Date:2023/03/11
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int p1,p2,p3;
string s;
char ch,k;
cin>>p1>>p2>>p3>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='-'){
if(p1==1){
if(s[i-1]<s[i+1]&&(s[i+1]-s[i-1])<27&&s[i-1]+1!=s[i+1]){
if(p3==2)
for(char k=s[i+1]-1;k>s[i-1];k--){
if(s[i-1]<97&&s[i-1]>58) ch=k+32;
else ch=k;
//cout<<k;
for(int j=1;j<=p2;j++)
cout<<ch;
}
else
for(char k=s[i-1]+1;k<s[i+1];k++){
if(s[i-1]<97&&s[i-1]>58) ch=k+32;
else ch=k;
//cout<<k;
for(int j=1;j<=p2;j++)
cout<<ch;
}
}
else{
if(s[i-1]<s[i+1]&&(s[i+1]-s[i-1])<27&&s[i-1]+1!=s[i+1])
for(char k=s[i-1]+1;k<s[i+1];k++)
cout<<"*";
else
cout<<s[i];
}
}
if(p1==2){
if(s[i-1]<s[i+1]&&(s[i+1]-s[i-1])<27&&s[i-1]+1!=s[i+1]){
if(p3==2)
for(char k=s[i+1]-1;k>s[i-1];k--){
if(s[i-1]<97) ch=k;
else ch=k-32;
//cout<<k;
for(int j=1;j<=p2;j++)
cout<<ch;
}
else
for(char k=s[i-1]+1;k<s[i+1];k++)
if(s[i-1]<97) ch=k;
else ch=k-32;
//cout<<k;
for(int j=1;j<=p2;j++)
cout<<ch;
}
else{
if(s[i-1]+1==s[i+1])
continue;
cout<<s[i];
}
}
if(p1==3){
if(s[i-1]<s[i+1]&&(s[i+1]-s[i-1])<27&&s[i-1]+1!=s[i+1])
for(char k=s[i-1]+1;k<s[i+1];k++)
cout<<"*";
else
cout<<s[i];
}
}
else cout<<s[i];
}
return 0;
}