当前位置: 首页 > news >正文

CCF CSP 第35次(2024.09)(2_字符串变换_C++)(哈希表+getline)

CCF CSP 第35次(2024.09)(2_字符串变换_C++)

      • 解题思路:
        • 思路一(哈希表+getline):
      • 代码实现
        • 代码实现(思路一(哈希表+getline)):

时间限制: 1.0 秒
空间限制: 512 MiB
原题链接
在这里插入图片描述

解题思路:

思路一(哈希表+getline):

1、解题步骤拆分:
① 数据输入:

  • 第一行输入字符串(string),需去掉首尾的#字符(含有空格使用getline)。
  • 第二行输入一个正整数 n 。
  • 接下来n行输入n个操作,格式为#xy# 将字符原先的x变为y(含有空格使用getline,注意上方有cin输入n则需消除回车)(为了快速的对应xy关系使用哈希表来存储) 。
  • 接下来输入一个整数m,表述查询的个数。
  • 接下来一行为m个正整数k1,k2…km。

② 数据处理:进行几次查询,就进行几次变换

③ 数据输出:进行相应的查询后输出,格式为:#string#

代码实现

代码实现(思路一(哈希表+getline)):
int main(int argc, char const *argv[])
{
    string str;
    // 获取一行的字符串(可以包含空格)
    getline(cin, str);
    // 去掉字符串的第一个和最后一个字符,通常是用于处理格式化字符串(如去除引号等)
    str = str.substr(1, str.size() - 2);

    // 使用哈希集合存储 n 个字符替换操作
    int n;
    cin >> n;

    // 清除 cin 输入后的回车符,防止 getline 读取到不需要的换行符
    cin.ignore();
    
    string option;
    // 创建一个无序映射(哈希表),用于存储字符的替换规则
    unordered_map<char, char> x_y;
    
    // 读取 n 个替换操作,填充哈希表
    for (int i = 0; i < n; i++) {
        // 读取替换操作(格式如 "x y")
        getline(cin, option);
        char x = option[1];  // 提取替换字符 x
        char y = option[2];  // 提取替换字符 y
        // 将字符 x 映射为字符 y
        x_y[x] = y;
    }

    // 读取需要进行处理的次数 m
    int m, k;
    cin >> m;
    string prestr = str;  // 保存原始的字符串,用于后续每次替换操作的开始

    // 循环 m 次,每次进行字符替换并打印结果
    for (int i = 0; i < m; i++) {
        // 读取整数 k,表示进行 k 次字符替换
        cin >> k;
        str = prestr;  // 恢复原始字符串

        // 执行 k 次字符替换
        for (int j = 0; j < k; j++) {
            // 遍历当前字符串中的每个字符
            for (auto &c : str) {
                // 如果字符 c 在哈希表中有对应的替换规则
                if (x_y.count(c)) {
                    c = x_y[c];  // 替换字符 c 为对应的 y
                }
            }
        }
        // 输出经过 k 次替换后的字符串,格式为 "#str#"
        cout << "#" << str << "#" << endl;
    }

    return 0;
}

欢迎大家和我沟通交流(✿◠‿◠)

相关文章:

  • java常见线程安全实现方案
  • 05-RabbitMQ 面试题-mk
  • 电感、互感器、变压器和磁珠综合对比——《器件手册--电感/线圈/变压器/磁珠篇》
  • Python 嵌套结构的defaultdict介绍
  • 训练模型的方式的两种方式:图像描述(Image Captioning)和对比学习(Contrastive Learning)原理及区别
  • 关于 Spring Boot 微服务解决方案的对比,并以 Spring Cloud Alibaba 为例,详细说明其核心组件的使用方式、配置及代码示例
  • 【25软考网工笔记】第二章 数据通信基础(2) 信道延迟计算
  • python利用open-cv和SSIM和特征值比较两个图片的相似性
  • JAVAEE(多线程)
  • 公路水运安全员,yyds!
  • (打卡)794. 高精度除法
  • js 效果展示 拿去练手
  • 大模型入门
  • Redis:线程模型
  • 小白学习java第12天:IO流之打印流、数据流、IO框架
  • Spark-core编程(三)
  • Redis与Caffeine的结合使用详解(高效的二级缓存解决方案)
  • 条件变量condition_variable
  • elementui table禁用全选,一次限制勾选一项。
  • vector的应用
  • 医疗行业网站怎么做/seo排名优化培训网站
  • 流媒体网站建设规划 所需设备/网络推广平台软件app
  • 公司网站建设毕业论文/windows优化大师有哪些功能
  • 深圳企业网站建设报价/域名批量查询工具
  • 国外包装设计网站大全/seo排名优化什么意思
  • 中国建设购物网站/刚刚突发1惊天大事