这道题就是存模拟,思路比较明确,主要就是实现。我的思路就是去找到'-'号,然后判断他是数字还是英文字母,并且再判断他们的左右顺序满足,右边严格大于左边,接着再根据p1,p2,p3所给的条件去拼接合理的字符串,我是把字符串拼接起来后,再最后输出。 然后核心代码就是这段
string a;
if(p1==3){
int cnt=s[i+1]-s[i-1]-1;
cnt=cnt*p2;
for(int i=0;i<cnt;i++){
a=a+"*";
}
}
else{
if(p3==1){
for(char j=s[i-1]+1;j<s[i+1];j++){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
else{
for(char j=s[i+1]-1;j>s[i-1];j--){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
}
string s1=s.substr(0,i);//拼接字符串
string s2=s.substr(i+1,s.size()-i-1);
s=s1+a+s2;
i=i+a.size();
完整代码如下:
```#include<iostream>
#include<algorithm>
#include<cmath>
#include<unordered_map>
using namespace std;
int main(){
string s;
int p1,p2,p3;
cin>>p1>>p2>>p3;
getchar();
cin>>s;
for(int i=1;i<s.size();i++){
if(s[i]=='-'){
if(isdigit(s[i-1])&&isdigit(s[i+1])){
if(s[i+1]>s[i-1]){
string a;
if(p1==3){
int cnt=s[i+1]-s[i-1]-1;
cnt=cnt*p2;
for(int i=0;i<cnt;i++){
a=a+"*";
}
}
else{
if(p3==1){
for(char j=s[i-1]+1;j<s[i+1];j++){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
else{
for(char j=s[i+1]-1;j>s[i-1];j--){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
}
string s1=s.substr(0,i);
string s2=s.substr(i+1,s.size()-i-1);
s=s1+a+s2;
i=i+a.size();
}
}
else if(s[i-1]>='a'&&s[i-1]<='z'&&s[i+1]>='a'&&s[i+1]<='z'){
if(s[i+1]>s[i-1]){
if(p1==1){
string a;
if(p1==3){
int cnt=s[i+1]-s[i-1]-1;
cnt=cnt*p2;
for(int i=0;i<cnt;i++){
a=a+"*";
}
}
else{
if(p3==1){
for(char j=s[i-1]+1;j<s[i+1];j++){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
else{
for(char j=s[i+1]-1;j>s[i-1];j--){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
}
string s1=s.substr(0,i);
string s2=s.substr(i+1,s.size()-i-1);
s=s1+a+s2;
i=i+a.size();
}
else{
string a;
if(p1==3){
int cnt=s[i+1]-s[i-1]-1;
cnt=cnt*p2;
for(int i=0;i<cnt;i++){
a=a+"*";
}
}
else{
if(p3==1){
for(char j=s[i-1]+1-32;j<s[i+1]-32;j++){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
else{
for(char j=s[i+1]-1-32;j>s[i-1]-32;j--){
for(int k=0;k<p2;k++){
a=a+j;
}
}
}
}
string s1=s.substr(0,i);
string s2=s.substr(i+1,s.size()-i-1);
s=s1+a+s2;
i=i+a.size();
}
}
}
}
}
cout<<s;
return 0;
}