day7
include
include<string.h>
include<stdio.h>
include
include <ctype.h>
using namespace std;
void expandString(char* str, int p1, int p2, int p3) {
int i = 0, len = strlen(str);
char result[1000] = { 0 }; // 假设结果字符串不会超过1000个字符
while (i < len) {
if (str[i] == '-' && i > 0 && i < len - 1) {
char left = str[i - 1];
char right = str[i + 1];
int isAlpha = isalpha(left) && isalpha(right);
int isDigit = isdigit(left) && isdigit(right);
if ((isAlpha || isDigit) && right > left) {
// 计算字符之间的差值
int diff = right - left;
// 根据p3决定是否逆序
if (p3 == 2) {
for (int j = diff; j > 0; j--) {
// 根据p1决定填充字符
if (p1 == 1 || p1 == 2) {
char fillChar = (isAlpha) ? (p1 == 1 ? left + j : left + j - 'a' + 'A') : (left + j);
// 根据p2决定填充字符的重复个数
for (int k = 0; k < p2; k++) {
strncat_s(result, &fillChar, 1);
}
}
else if (p1 == 3) {
// 用星号填充
for (int k = 0; k < p2; k++) {
strncat_s(result, "*", 1);
}
}
}
}
else {
for (int j = 1; j <= diff; j++) {
// 根据p1决定填充字符
if (p1 == 1 || p1 == 2) {
char fillChar = (isAlpha) ? (p1 == 1 ? left + j : left + j - 'a' + 'A') : (left + j);
// 根据p2决定填充字符的重复个数
for (int k = 0; k < p2; k++) {
strncat_s(result, &fillChar, 1);
}
}
else if (p1 == 3) {
// 用星号填充
for (int k = 0; k < p2; k++) {
strncat_s(result, "*", 1);
}
}
}
}
i += 2; // 跳过已经处理的字符
}
else {
// 如果不是需要展开的字符,直接添加到结果中
strncat_s(result, &str[i], 1);
i++;
}
}
else {
// 如果不是减号,直接添加到结果中
strncat_s(result, &str[i], 1);
i++;
}
}
printf("%s",result);
}
int main() {
int a,b,c;
cin >> a>>b>>c;
char* p = new char[100];
cin >> p;
expandString(p, a, b, c);
return 0;
}
浙公网安备 33010602011771号