思路
将分类讨论各种可能性,把所有的可能性列出来。
// 当“-”前后字符为数字时按照规则去掉"-"号插入数字或者“*”号或者逆序表示;
std::string intoDigit(int p1,int p2,int p3,char first,char last)
// 当“-”前后字符为字母时按照规则去掉"-"号插入字母或者“*”号,或者逆序表示;
std::string intoCharacter(int p1,int p2,int p3,char first,int last)
// 顺序遍历输入的字符串,判断各类情况
void changeAString(int p1,int p2,int p3,const std::string &originString,std::string &newString)
#代码
#include <iostream>
#include <string>
#include <algorithm>
std::string intoDigit(int p1,int p2,int p3,char first,char last)
{
int interval=last-first;
std::string intoString;
if(p1==3)
{
for(int i=1;i<interval;i++)
{
for(int j=0;j<p2;j++)
{
intoString+='*';
}
}
}
else
{
for(int i=1;i<interval;i++)
{
for(int j=0;j<p2;j++)
{
intoString+=(first+i);
}
}
}
if(p3==2) reverse(intoString.begin(),intoString.end());
return intoString;
}
std::string intoCharacter(int p1,int p2,int p3,char first,int last)
{
int interval=last-first;
std::string intoString;
if(p1==1)
{
// if(first>='A'&&first<='Z') first+=32;
for(int i=1;i<interval;i++)
{
for(int j=0;j<p2;j++)
{
intoString+=(first+i);
}
}
}
else if(p1==2)
{
// if(first>='a'&&first<='z')
first-=32;
//std::cout<<first<<std::endl;
for(int i=1;i<interval;i++)
{
for(int j=0;j<p2;j++)
{
intoString+=(first+i);
}
}
}
else
{
for(int i=1;i<interval;i++)
{
for(int j=0;j<p2;j++)
{
intoString+='*';
}
}
}
if(p3==2)
{
reverse(intoString.begin(),intoString.end());
}
return intoString;
}
void changeAString(int p1,int p2,int p3,const std::string &originString,std::string &newString)
{
int length=originString.size();
if(length<=2) newString=originString;
// std::cout<<length<<std::endl;
newString+=originString[0];
// std::cout<<newString[0]<<std::endl;
for(int i=1;i<length-1;i++)
{
// std::cout<<newString<<std::endl;
newString+=originString[i];
if(originString[i]=='-')
{
char first=originString[i-1];
char last=originString[i+1];
// std::cout<<aString.at(i-1)<<std::endl;
if(first>='0'&&first<='9')
{
if(last>='0'&&last<='9')
{
if(last-first==1) newString.pop_back();
if(last-first>1)
{
// std::cout<<"START"<<": "<<newString<<std::endl;
std::string tempString;
// std::cout<<"MIDDLE1"<<": "<<newString<<std::endl;
tempString=intoDigit(p1, p2,p3, first,last);
// std::cout<<"MIDDLE2"<<": "<<newString<<std::endl;
// newString.erase(i);
// std::cout<<"MIDDLE"<<": "<<newString<<std::endl;
// std::cout<<tempString<<std::endl;
newString.pop_back();
newString+=tempString;
// std::cout<<newString<<std::endl;
}
}
}
if(first>='a'&&last<='z')
{
// std::cout<<first<<std::endl;
if(last>='a'&&last<='z')
{
if(last-first==1) newString.pop_back();
if(last-first>1)
{
std::string tempString;
tempString=intoCharacter(p1, p2, p3,first,last);
newString.pop_back();
newString+=tempString;
}
}
}
}
}
newString+=originString[length-1];
}
int main()
{
int p1,p2,p3;
std::string aString;
std::cin>>p1>>p2>>p3;
//std::cout<<std::endl;
std::cin>>aString;
std::string newString;
changeAString(p1,p2,p3,aString,newString);
std::cout<<newString<<std::endl;
}