蓝桥杯备考:模拟算法之字符串展开
P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷 | 计算机科学教育新生态
#include <iostream>
#include <cctype>
#include <algorithm>
using namespace std;
int p1,p2,p3;
string s,ret;
void add(char left,char right)
{
string tmp;
for(char ch = left+1;ch<right;ch++)
{
char t = ch;
if(p1==2&&isalpha(ch)) t=toupper(t);
else if(p1==3) t='*';
for(int i = 0;i<p2;i++)
{
tmp+=t;
}
}
if(p3 == 2) reverse(tmp.begin(),tmp.end());
ret+=tmp;
}
int main()
{
cin >> p1 >> p2 >> p3;
cin >> s;
int n = s.size();
for(int i = 0;i<n;i++)
{
char ch = s[i];
if(ch != '-' || i==n-1 || i==0) ret+=ch;
else
{
char left = s[i-1];char right = s[i+1];
if((isdigit(left)&&isdigit(right)&&right>left)||(isalpha(left)&&isalpha(right) && right>left))
{
add(left,right);
}
else ret+=ch;
}
}
cout << ret << endl;
return 0;
}