• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

ph-123456

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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;

}

posted on 2024-11-06 12:44  哈哈哈哈666  阅读(15)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3