写的复杂了点,写了一百多行,可以优化掉很多
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#include <unordered_map>
#define ms(a,b) memset((a),(b),sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int P = 131;
const int N = 1010;
const int inf = 0x3f3f3f3f;
const ll lnf = 9e18;
int f( char a ) {
if( a >= 'a' && a <= 'z' ) return 1;
else if( a >= 'A' && a <= 'Z' ) return 2;
else if( a >= '0' && a <= '9' ) return 3;
else if( a == ' ' ) return 4;
else return 5;
}
int main() {
int a, b, c;
string s;
cin >> a >> b >> c >> s;
int n = s.size();
if( a == 1 ) {
for( int i = 0; i < n; i++ ) {
if( s[i] == '-' && s[i - 1] < s[i + 1] && f( s[i - 1] ) == f( s[i + 1] ) && i >= 1 && i <= n - 2 ) {
if( c == 1 ) {
char l = s[i - 1], r = s[i + 1] - 1;
while( l < r ) {
l++;
for( int j = 0; j < b; j++ ) {
printf( "%c", l );
}
}
}
else {
char l = s[i - 1] + 1, r = s[i + 1];
while( l < r ) {
r--;
for( int j = 0; j < b; j++ ) {
printf( "%c", r );
}
}
}
}
else printf( "%c", s[i] );
}
}
else if( a == 2 ) {
for( int i = 0; i < n; i++ ) {
if( s[i] == '-' && s[i - 1] < s[i + 1] && f( s[i - 1] ) == f( s[i + 1] ) && i >= 1 && i <= n - 2 ) {
if( c == 1 ) {
char l = s[i - 1], r = s[i + 1] - 1;
if( f( l ) == 1 ) {
l += 'A' - 'a';
r += 'A' - 'a';
}
while( l < r ) {
l++;
for( int j = 0; j < b; j++ ) {
printf( "%c", l );
}
}
}
else {
char l = s[i - 1] + 1, r = s[i + 1];
if( f( l ) == 1 ) {
l += 'A' - 'a';
r += 'A' - 'a';
}
while( l < r ) {
r--;
for( int j = 0; j < b; j++ ) {
printf( "%c", r );
}
}
}
}
else printf( "%c", s[i] );
}
}
else {
for( int i = 0; i < n; i++ ) {
if( s[i] == '-' && s[i - 1] < s[i + 1] && f( s[i - 1] ) == f( s[i + 1] ) && i >= 1 && i <= n - 2 ) {
char l = s[i - 1], r = s[i + 1] - 1;
while( l < r ) {
l++;
for( int j = 0; j < b; j++ ) {
printf( "*" );
}
}
}
else printf( "%c", s[i] );
}
}
return 0;
}