代码中存在几个问题,特别是在处理逆序填充时。让我们逐一解决这些问题:
逆序填充逻辑:在当前代码中,逆序填充的逻辑没有正确实现。特别是,当 p3 == 2 时,逆序填充的逻辑应该从 end 递减到 start。
内层循环变量名冲突:内层填充循环中的变量 i 与外层循环的变量 i 冲突。我们需要为内层循环使用不同的变量名。
字符递增递减处理:在逆序和正序填充时,字符递增递减的处理需要根据字符是数字还是字母来决定。
星号填充:星号填充逻辑是正确的,不需要修改。
帮你改好了:
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int p1,p2,p3;cin>>p1>>p2>>p3;
string a;cin>>a;
cout<<a[0];
for(int i=1;i<a.size();i++){
if(a[i]!='-'){
cout<<a[i];continue;
}
if(a[i-1]=='-'||a[i+1]=='-'){
cout<<"-";continue;
}
if(a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z'){
if(a[i-1]>=a[i+1]){
cout<<"-";continue;
}
char b=a[i-1],c=a[i+1];
if(p1<3){
if(p1==2)b=b-'a'+'A',c=c-'a'+'A';
if(p3==1){
for(int i=b+1;i<c;i++){
for(int z=0;z<p2;z++){
cout<<char(i);
}
}
}else{
for(int i=c-1;i>b;i--){
for(int z=0;z<p2;z++){
cout<<char(i);
}
}
}
}else{
for(int i=b+1;i<c;i++){
for(int z=0;z<p2;z++){
cout<<"*";
}
}
}
}else if(a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i-1]<='9'){///////
if(a[i-1]>=a[i+1]){
cout<<"-";continue;
}
if(p1==3){
for(int i=a[i-1]+1;i<a[i+1];i++){
for(int z=0;z<p2;z++){
cout<<"*";
}
}
}else{
//cout<<endl<<a[i-1]<<" "<<a[i+1]<<":";
char b1=a[i-1],b2=a[i+1];
for(int i=b1+1;i<b2;i++){
for(int z=0;z<p2;z++){
cout<<char(i);
}
}
}
}else{
cout<<"-";
}
}
return 0;
}
```
[评测记录](https://www.luogu.com.cn/record/159445670)
by FearlessWarriors @ 2024-05-18 18:35:07
希望能帮到你
by FearlessWarriors @ 2024-05-18 18:35:23
```
#include <bits/stdc++.h>
using namespace std;
int p1, p2, p3;
string s;
int i = 0;
bool is_equal(char a, char b) {
if (isalpha(a) && isalpha(b) && islower(a) && islower(b))return true;
else if (isdigit(a) && isdigit(b))return true;
return false;
}
int main() {
cin >> p1 >> p2 >> p3 >> s;
while (s[i]) {
char bc = s[i - 1], c = s[i], ac = s[i + 1];
if (c == '-' && is_equal(ac, bc) && ac > bc) {
if (p3 == 1) {
for (char j = bc + 1; j < ac; j ++ ) {
char tmp = j;
if (p1 == 2 && isalpha(j))tmp = toupper(j);
else if (p1 == 3)tmp = '*';
for (int k = 1; k <= p2; k ++ )cout << tmp;
}
} else {
for (char j = ac - 1; j > bc; j -- ) {
char tmp = j;
if (p1 == 2 && isalpha(j))tmp = toupper(j);
else if (p1 == 3)tmp = '*';
for (int k = 1; k <= p2; k ++ )cout << tmp;
}
}
} else {
cout << c;
}
i ++;
}
return 0;
}
```
更短但思路不一样QAQ
by Dino_tang @ 2024-06-24 14:23:09
@[yi105011](/user/1241185)
by Dino_tang @ 2024-06-24 14:23:58