NOIP2007]字符串的展开
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cctype>
using namespace std;
int p1,p2,p3;
string str;
bool check(int i)
{
if(i>0&&i+1<str.length()&&str[i]=='-'&&str[i-1]<str[i+1])
if((islower(str[i-1])&&islower(str[i+1]))||(isdigit(str[i+1])&&isdigit(str[i-1])))
return true;
return false;
}
int main()
{
cin>>p1>>p2>>p3;
cin>>str;
string res;
for(int i=0;i<str.length();i++)
{
if(check(i))
{
string temp;
for(int j=str[i-1]+1;j<str[i+1];j++)
{
for(int k=0;k<p2;k++) //k是重复次数
{
if(p1==1) //要小写
{
if(str[i-1]>='A'&&str[i-1]<='Z') // 但是现在是大写
temp.push_back(j-'A'+'a');
else
temp.push_back(j); //要小写 现在是小写 直接pushback
}
else if(p1==2) //要大写
{
if(str[i-1]>='a'&&str[i-1]<='z') //现在是小写
temp.push_back(j-'a'+'A');
else
temp.push_back(j); //要大写 直接pushback printf("%c\n",j-'a'+'A');
}
else if(p1==3) //需要用星号填充
{
res.push_back('*');
}
//cout<<res<<endl;
}
}
if(p3==2) //如果需要逆序输出
{
reverse(temp.begin(),temp.end());
}
res.append(temp);
}
else res.push_back(str[i]);
}
cout<<res;
}