1.输入
2.遍历字符串,找到“-”
3.判断是否需要展开
~左右同为数字,或者同为数字
~如果s[i+1]-s[i-1]==1,去掉“-”
剩下的所有情况,都保留“-”
4.展开的规则
~如果p3是1,顺序展开
~如果p3是2,倒序展开
如果p1是1,小写填充,如果是2,大写填充,如果是3,“*”填充
每个字符输出p2次
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int p1,p2,p3;
string s;
bool judge(char a,char b){//判定a和b是否同为数字/字母
if(isdigit(a)&&isdigit(b))return true;
else if(isalpha(a)&&isalpha(b))return true;
return false;
}
void exp(char a,char b){
if(p3==1){
for(char i=a+1;i<b;i++){
for(int j=0;j<p2;j++){
if(p1==1){
printf("%c",tolower(i));
}
else if(p1==2){
printf("%c",toupper(i));
}
else cout<<"*";
}
}
}
else {
for(char i=b-1;i>a;i--){
for(int j=0;j<p2;j++){
if(p1==1){
printf("%c",tolower(i));
}
else if(p1==2){
printf("%c",toupper(i));
}
else cout<<"*";
}
}
}
}
int main(){
cin>>p1>>p2>>p3>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='-'){
if(s[i+1]-s[i-1]==1)continue;
else if(s[i+1]<=s[i-1]){
cout<<s[i];
continue;
}
else if(judge(s[i-1],s[i+1])){
exp(s[i-1],s[i+1]);
continue;
}
}
cout<<s[i];
}
return 0;
}
该程序读取输入参数,遍历字符串,处理连续的数字或字母间的-。如果差值为1,则删除-;否则,根据参数p1(小写、大写或*填充)、p2(重复次数)和p3(正序或倒序展开)进行相应操作。
481

被折叠的 条评论
为什么被折叠?



