@ sz_mane 看看
by ly_magician @ 2024-01-23 21:55:53
哪位神犇看看(求求了)
by ly_magician @ 2024-01-23 21:59:04
提供一个比较简洁的写法QAQ
这道题细节比较多自己看吧~~其实就是不想调别人的代码比较懒~~
```cpp
#include<iostream>
#include<cstdio>
using namespace std;
int p1, p2, p3;//三个参数
//isalpha(x)是否是字母,isdigit(x)是否是数字
//tolower(x)改成小写,toupper(x)改成大写
//展开函数,参数是两端字符
void printstr(char l, char r){
/*若l不小于r或者两端字符类型不同,原样输出'-'*/
if (l >= r || ( isdigit(l) && isalpha(r) ) || ( isdigit(r) && isalpha(r) ) ) printf("-");
else if (l + 1 == r) return ;/*若l和r只差1,省略'-'*/
else{
if(isalpha(l) && p1 == 1)l = tolower(l),r = tolower(r);
if(isalpha(l) && p1 == 2)l = toupper(l),r = toupper(r);
if(p3 == 1){//正序
for(char i = l+1;i < r;i++)
for(int n = 0;n < p2;n++)
printf("%c",(p1 == 3)?'*':i );
}
if (p3 == 2){//倒序
for(char i = r-1;i > l;i--)
for(int n = 0;n < p2;n++)
printf("%c",(p1 == 3)?'*':i );
}
}
return ;
}
int main(){
scanf("%d%d%d",&p1,&p2,&p3);
string str; cin>>str;
char lst;int st;//上一位字符;开头非'-'字符位置
for(int i = 0;i < str.size();i++){
if(str[i] == '-')printf("-");
else {st = i;break;}
}
for(int i = st;i < str.size();i++){
if(str[i] != '-') printf("%c", str[i]);
else if( (i + 1 == str.size()) || (i + 1 != str.size() && str[i + 1] == '-') || (lst == '-')) printf("-");//是'-'但是是最后一位/上\下一位也是'-'
else printstr(lst, str[i + 1]);
lst = str[i];
} return 0;
}
```
by 帝都_henry26268 @ 2024-01-24 16:48:17
@[ly202303](/user/1185854)
by 帝都_henry26268 @ 2024-01-24 16:48:34