P1098 NOIP2007 提高组 字符串的展开
菜鸟生成记(40)
又是一道模拟水题,没啥难度,就是看你"细不细",粗心到处是坑,心细的话一遍过;(我嘛!把坑踩完,才过了T-T)
#include<iostream>
#include<vector>
using namespace std;
vector<string> str;
vector<string>::iterator ita;
int a,b,c,num=0,len=0;
string s;
void fun()
{
int n=0;
string x;
switch(a)
{
case 1://小写
switch(c)
{
case 1://小写顺序
x.clear();
for(char i=s[num-1]+1;i<=s[num+1]-1;i++)
{
for(int j=0;j<b;j++)
{
x.push_back(i);
}
}
str.push_back(x);
break;
case 2://小写逆序
x.clear();
for(char i=s[num+1]-1;i>=s[num-1]+1;i--)
{
for(int j=0;j<b;j++)
{
x.push_back(i);
}
}
str.push_back(x);
break;
}
break;
case 2://大写
switch(c)
{
case 1://大写顺序
x.clear();
for(char i=s[num-1]+1;i<=s[num+1]-1;i++)
{
for(int j=0;j<b;j++)
{
if(islower(s[num-1]))
{
char s1=i-32;
x.push_back(s1);
}
else
{
x.push_back(i);
}
}
}
str.push_back(x);
break;
case 2://大写逆序
x.clear();
for(char i=s[num+1]-1;i>=s[num-1]+1;i--)
{
for(int j=0;j<b;j++)
{
if(islower(s[num-1]))
{
char s1=i-32;
x.push_back(s1);
}
else
{
x.push_back(i);
}
}
}
str.push_back(x);
break;
}
break;
case 3:
x.clear();
for(char i=s[num-1]+1;i<=s[num+1]-1;i++)
{
for(int j=0;j<b;j++)
{
x.push_back('*');
}
}
str.push_back(x);
break;
}
}
int main()
{
cin>>a>>b>>c;
cin>>s;
while((num=s.find('-',num))!=-1)
{
if(num==0)
num++;
else
{
if(islower(s[num-1])&&islower(s[num+1])||isdigit(s[num-1])&&isdigit(s[num+1]))
{
if(s[num-1]<s[num+1])
{
if(s[num+1]-s[num-1]==1)
{
s.erase(num,1);
}
else
fun();
}
else;
}
num++;
}
}
ita=str.begin();
for(int i=0;i<s.size();i++)
{
if(s[i]=='-')
{
if(i==0||i==s.size()-1)
{
cout<<'-';
continue;
}
if(s[i+1]=='-'||s[i-1]=='-')
{
cout<<'-';
continue;
}
if(s[i-1]>=s[i+1])
{
cout<<'-';
continue;
}
if(islower(s[i-1])&&isdigit(s[i+1]))
{
cout<<'-';
continue;
}
if(islower(s[i+1])&&isdigit(s[i-1]))
{
cout<<'-';
continue;
}
cout<<*ita++;
}
else
cout<<s[i];
}
return 0;
}