写的复杂了点,写了一百多行,可以优化掉很多

#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;
}