001. 字符串的展开
原题链接:字符串的展开
纯模拟题
AC代码:
#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
string str;
void extend(char a,char b,int p1,int p2,int p3)
{ //确定起点终点,填充字符类型,填充次数,填充顺序
int n = b - a;
cout << a;
if(n > 0)//正常情况
{
if(p1 == 3){//星号,不需要考虑顺序
for(int i = 0 ; i < (n - 1)*p2;i++)
cout << "*";
}
else if(p1 == 2){//填充大写
if(p3 == 1){//原来顺序
if(b < 'a') //说明原来是数字
for(int i = 1;i < n;i++)
for(int j = 0;j < p2;j++)
printf("%c",a + i);
else
for(int i = 1;i < n;i++)
for(int j = 0;j < p2;j++)
printf("%c",a + i - 32);//这里32是差值
}
else{//逆序
if(b < 'a') //说明原来是数字
for(int i = n - 1;i >= 1; i--)
for(int j = 0;j < p2;j++)
printf("%c",a + i);
else
for(int i = n - 1;i >= 1;i--)
for(int j = 0;j < p2;j++)
printf("%c",a + i - 32);//这里32是差值
}
}
else {//填充小写
if(p3 == 1){//原来顺序
for(int i = 1;i < n;i++)
for(int j = 0;j < p2;j++)
printf("%c",a + i);
}
else{//逆序
for(int i = n-1;i >= 1;i--)
for(int j = 0;j < p2;j++)
printf("%c",a + i);
}
}
}
else if(n <= 0)
cout << "-";
}
int main(){
int p1, p2, p3;
cin >> p1 >> p2 >> p3;
cin >> str;
for(int i = 0;i < str.length();i++){
if(str[i+1] == '-' && ((isdigit(str[i]) && isdigit(str[i+2])) || (islower(str[i]) && islower(str[i+2]))))
{
extend(str[i],str[i+2],p1,p2,p3);
i++ ;
}
else{
cout<<str[i];
}
}
return 0;
}
标签:p2,int,else,++,str,printf,字符串,展开
From: https://www.cnblogs.com/zyihan-crz/p/18686245