CSP-J/S冲奖第19天:真题解析
开心田螺
2025-03-18 17:45:03
0

详细解析

  1. 问题理解

  • 需要在文章中查找特定单词的出现次数和第一次出现的位置。

  • 匹配条件:不区分大小写,且必须是独立单词完全匹配。

  • 输入处理

    • 第一行输入目标单词,转换为小写。

    • 第二行输入文章,按空格分割成单词,并记录每个单词的起始位置。

  • 分割单词与位置记录

    • 遍历文章字符串,跳过空格,记录每个单词的起始位置和结束位置。

    • 将每个单词转换为小写,以便后续比较。

  • 统计与输出

    • 遍历分割后的单词列表,统计匹配次数并记录第一次出现的位置。

    • 根据统计结果输出相应格式。

    参考代码 # include

    usingnamespacestd;

    intmain{

    stringtarget, article;

    getline( cin, target);

    getline( cin, article);

    // 将目标单词转为小写

    transform(target.begin, target.end, target.begin, :: tolower);

    vectorstring, int>> words; // 存储单词的小写形式及其起始位置

    intn = article.length;

    for( inti = 0; i < n;) {

    // 跳过空格

    while(i < n && article[i] == ' ') i++;

    if(i >= n) break;

    intstart = i; // 记录单词起始位置

    // 找到单词的结束位置

    while(i < n && article[i] != ' ') i++;

    stringword = article.substr(start, i - start);

    // 转换为小写

    transform(word.begin, word.end, word.begin, :: tolower);

    words.push_back({word, start});

    }

    intcount = 0;

    intfirst_pos = -1;

    for( constauto& p : words) {

    if(p.first == target) {

    count++;

    if(first_pos == -1) {

    first_pos = p.second;

    }

    }

    }

    if(count > 0) {

    cout<< count << " "<< first_pos << endl;

    } else{

    cout<< -1<< endl;

    }

    return0;

    }

    代码解释

    1. 统一大小写

    • 使用 transform 函数将目标单词和文章中的每个单词转为小写,确保匹配时不区分大小写。

  • 分割单词与记录位置

    • 遍历文章字符串,通过跳过空格找到每个单词的起始位置,并截取单词。

    • 将每个单词的小写形式及其起始位置存入 vector 中。

  • 统计匹配结果

    • 遍历存储的单词列表,统计与目标单词匹配的次数,并记录第一次出现的位置。

  • 输出结果

    • 根据匹配次数输出次数和位置,或输出 -1。

    示例测试

    输入 #1

    To

    to be or not to be is a question

    处理过程

    • 目标单词转为小写后为 to。

    • 文章分割后的单词列表为 {"to", "be", "or", "not", "to", "be", ...},起始位置分别为 0, 3, 6, 9, 13, 16, ...。

    • 匹配到两次 to,第一次位置为 0。

    输出 #1

    2 0

    输入 #2

    to

    Did the Ottoman Empire lose its power at that time

    处理过程

    • 目标单词为 to。

    • 文章中的单词均不匹配 to,故输出 -1。

    输出 #2

    -1

    关键点总结

    • 大小写处理:统一转为小写确保不区分大小写。

    • 单词分割:正确分割空格,记录起始位置。

    • 完全匹配:确保单词是独立存在的,而非其他单词的一部分。

    相关内容

    热门资讯

    自考丨广西关于停考高等教育自学... 为进一步优化我区高等教育自学考试(以下简称自学考试)专业设置,根据教育部办公厅《高等教育自学考试专业...
    南通留学中介推荐哪家 一、南通学子如何寻找合适的留学中介? 在南通,许多有志于海外深造的学生和家长常常会问:“南通留学中...
    韩燕博士:“青少年健康成才20... 在青少年健康成才的宏大旅程中,“心法十:开展贯穿生涯的自我探索与规划”居于核心枢纽地位。它绝非一个静...
    集宁区中小学把研学课堂搬到冰天... 为积极响应国家“带动三亿人参与冰雪运动”的号召,推动校园体育文化建设,近日,集宁区各中小学相继组织学...
    【访企拓岗】深化产教融合,赋能... 深化产教融合 赋能就业育人 经济与管理学院赴北京天津 开展访企拓岗专项行动 为进一步拓宽校企合作渠道...
    2026年高考生注意:强基计划... 强基计划校测环节的笔试内容根据考生报考专业类别设置,理科类主要考核数学、物理、化学,文科类主要考核语...
    帮扶暖人心,关爱伴成长!区教育... 近日,海淀区教育系统关工委 开展了专题学习会 开启京黔教育精准帮扶实践 精心组织中医养生公益活动 一...
    天门中小学、幼儿园寒假时间明确... 网友问: 今年中小学幼儿园寒假时间预计什么时候呢? 答: 网友“哈哈” 您好! 您关于天门中小学、幼...
    巴林左旗:德育视导全覆盖 深耕... 秋尽冬来,步履不歇。近日,一场历时两个多月、覆盖巴林左旗全部小学的德育专项视导工作圆满收官。旗教育教...
    卸任中国人民大学校长,福建人林... 据“中国人民大学国际关系学院”微信公众号发布的第七届中国政治学知识体系论坛会议议程信息,今年11月卸...