题目不难,但是太长了。😪
debug了好几次
#include <bits/stdc++.h>
using namespace std;
bool isWord(int l, int r, string s)
{
// 两侧都是字母
return s[l] >= 65 && s[l] <= 122 && s[r] >= 65 && s[r] <= 122;
}
bool isNumber(int l, int r, string s) {
// 两侧都是数字
return s[l] >= 48 && s[l] <= 57 && s[r] >= 48 && s[r] <= 57;
}
// 数字填充
void insertNumber(int l, int r, string &s, int p2, int p3) {
string op;
int dis = s[r] - s[l];
for (int i = 1; i < dis; i++)
{
for (int j = 0; j < p2; j++)
{
op += static_cast<char>(s[l] + i);
}
}
if (p3 == 2)
reverse(op.begin(), op.end());
s.replace(l + 1, 1, op);
}
// 小写字母填充
void insertLowerWord(int l, int r, string &s, int p2, int p3)
{
string op;
int dis = s[r] - s[l];
for (int i = 1; i < dis; i++)
{
for (int j = 0; j < p2; j++)
{
op += static_cast<char>(s[l] + i);
}
}
if (p3 == 2)
reverse(op.begin(), op.end());
s.replace(l + 1, 1, op);
}
// 大写字母填充
void insertUpperWord(int l, int r, string &s, int p2, int p3)
{
string op;
int dis = s[r] - s[l];
for (int i = 1; i < dis; i++)
{
// 转成大写字母
char temp;
if (i < 97)
temp = s[l] - 32;
for (int j = 0; j < p2; j++)
{
op += static_cast<char>(temp + i);
}
}
if (p3 == 2)
reverse(op.begin(), op.end());
s.replace(l + 1, 1, op);
}
// *填充
void insertSign(int l, int r, string &s, int p2, int p3)
{
string op;
int dis = s[r] - s[l];
for (int i = s[l] + 1; i < s[r]; i++)
{
for (int j = 0; j < p2; j++)
{
op += '*';
}
}
s.replace(l + 1, 1, op);
}
void solve()
{
string s;
int p1, p2, p3;
cin >> p1 >> p2 >> p3 >> s;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '-')
{
if (s[i - 1] + 1 == s[i + 1])
{
s.erase(i, 1);
}
else if (s[i - 1] >= s[i + 1])
{
continue;
}
else
{
if (p1 == 1)
{
if(isWord(i - 1, i + 1, s)) insertLowerWord(i - 1, i + 1, s, p2, p3);
else if(isNumber(i - 1, i + 1, s)) insertNumber(i - 1, i + 1, s, p2, p3);
}
else if (p1 == 2)
{
if(isWord(i - 1, i + 1, s)) insertUpperWord(i - 1, i + 1, s, p2, p3);
else if(isNumber(i - 1, i + 1, s)) insertNumber(i - 1, i + 1, s, p2, p3);
}
else if (p1 == 3)
{
if(i - 1 < 0) continue;
insertSign(i - 1, i + 1, s, p2, p3);
}
}
}
}
cout << s;
}
int main()
{
solve();
}