字符串的展开
原题链接:字符串的展开
纯模拟题
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); elsefor(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); elsefor(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;
}