题解: 简单题,细节注意好就行。首先:只有 - 左右都是数字或都是字母才进行拓展,左右相等或右小于左直接输出 - ;其次:进行分情况讨论,p1==2时,即大写时,要讨论是数字还是字母,字母-32,数字不需要,注意这个关键点就行。最后:输出 * 号时,重复数也要考虑进去;
参考代码:
#include <string>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int p1, p2, p3;
string str;
int main()
{
cin >> p1 >> p2 >> p3;
cin >> str;
for(int i = 0; i < str.size(); i++)
{
if(str[i] == '-')
{
if((((str[i + 1] >= 'a' && str[i + 1] <= 'z') && (str[i - 1] >= 'a' && str[i - 1] <= 'z')))
||((str[i + 1] >= '0' && str[i + 1] <= '9') && (str[i - 1] >= '0' && str[i - 1] <= '9')))
{
if(str[i + 1] == str[i - 1] || str[i + 1] < str[i - 1]) cout << "-";
else if(str[i + 1] - str[i - 1] != 1)
{
if(p1 == 1 && p3 == 1)
{
int t = str[i + 1] - str[i - 1] - 1;
char s = str[i - 1];
for(int k = 0; k < t; k++)
{
s++;
for(int j = 0; j < p2; j++) cout << s;
}
}
else if(p1 == 1 && p3 == 2)
{
int t = str[i + 1] - str[i - 1] - 1;
char s = str[i + 1];
for(int k = 0; k < t; k++)
{
s--;
for(int j = 0; j < p2; j++) cout << s;
}
}
else if(p1 == 2 && p3 == 1)
{
int t = str[i + 1] - str[i - 1] - 1;
char s = str[i - 1];
if(str[i - 1] <= '9' && str[i - 1] >= '0');
else s = str[i - 1] - 32;
for(int k = 0; k < t; k++)
{
s++;
for(int j = 0; j < p2; j++) cout << s;
}
}
else if(p1 == 2 && p3 == 2)
{
int t = str[i + 1] - str[i - 1] - 1;
char s = str[i + 1];
if(str[i - 1] <= '9' && str[i - 1] >= '0');
else s = str[i + 1] - 32;
for(int k = 0; k < t; k++)
{
s--;
for(int j = 0; j < p2; j++) cout << s;
}
}
else if(p1 == 3 && (p3 == 1 || p3 == 2))
{
int t = str[i + 1] - str[i - 1] - 1;
for(int k = 0; k < t; k++)
{
for(int j = 0; j < p2; j++) cout << "*";
}
}
}
}
else cout << "-";
}
else cout <<str[i];
}
return 0;
}