要考虑两个“-”这个情况啊
by xwx654321 @ 2024-01-20 20:38:23
总体思路有问题,首先p33,p3不可能为3,读题了吗?
by qusia_MC @ 2024-01-21 18:28:29
改好了:
@[wch666](/user/778382)
```
#include <bits/stdc++.h>
using namespace std;
int p1,p2,p3;
char s[105];
void p31(int l,int r)//l,r,表示一个减号的左右两端区间,下同
{
for(char x=s[l]+1; x<s[r]; x++)
for(int j=1; j<=p2; j++)
if(p1==3)
{
cout<<'*';
}//先判断如p1=3,那无论怎样都用*代替
else if(p1==1||(x>='0'&&x<='9'))
{
cout<<char(x);
}//如果是数字或p1=1直接输出
else if(p1==2){
cout<<char(x-32);//否则转个大写
}
}
void p32(int l,int r )
{
for(char x=s[l]-1; x>=s[r]+1; x--)
for(int j=0; j<p2; j++)if(p1==3)
{
cout<<'*';
}
else if(p1==1||(x>='0'&&x<='9'))
{
cout<<char(x);
}
else if(p1==2){
cout<<char(x-32);
}
//和上一样,不打了
}
int main()
{
cin>>p1>>p2>>p3;
cin>>s;
int len=strlen(s);
cout<<s[0];
for(int i=1; i<len; i++)
{
if(s[i] == '-'&&s[i-1]<s[i+1]&&i!=len-1&&s[i-1]!='-'&&s[i+1]!='-')
//尾部的-直接输出
//两个或以上的-直接输出不展开
{
if(s[i-1]>='0'&&s[i-1]<='9'&&(s[i+1]>='A'&&s[i+1]<='Z'||s[i+1]>='a'&&s[i+1]<='z'))
{
cout<<s[i];
}
//一边数字一边字母不展开
else if(s[i-1]+1!=s[i+1]){
//不是后继
int c=s[i-1];
if(p3 == 1)
p31(i-1,i+1);
else if(p3 == 2)
p32(i+1,i-1);
cout<<s[i+1];
i++;//别忘处理
}
}
else
{
cout<<s[i];
}
}
return 0;
}
```
思路有问题,认真读一下题
坑点:开始结束的-直接输出
一边字母一边数字输出
两个以上-直接输出
by qusia_MC @ 2024-01-21 18:57:00