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

    关键点总结

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

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

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

    相关内容

    热门资讯

    法考知识点:物权编高频考点(二... 法考知识点:物权编高频考点(二)——所有权与用益物权(附真题详解) 物权编的核心考点——所有权(共有...
    法考经验分享 | 稻香里的法考... 初心如磐:检徽之下,再启新程 我是丹东铁路运输检察院的一名检察干警,入检生涯即将迈入第五个年头。 身...
    速看!210所高校拟新增硕博点... 对于27考研党而言,近期最值得关注的重磅消息莫过于2026年度学位授权审核动态调整名单的陆续公示。全...
    2027宁波大学设计专硕769... A 真题试卷答案部分: 2025年宁波大学769艺术设计评论考研真题试卷与参考答案 2024年宁波大...
    正在公示!郑州14名校长入选 经个人申报、市县遴选推荐、专家评审 拟确定马大志等122名中小学校(园)长 作为河南省“十五五”中小...
    青岛盟诺学校:西北、港大+伯克... 2026申请季已渐近尾声。当四封来自加州大学伯克利分校的录取通知轰轰烈烈地抵达盟诺校园,点燃了整个申...
    留学生求职网站性价比高:客观评... 据公开行业数据显示,超过 50% 的留学生选择回国发展,70% 的毕业生面临即时就业压力,热门岗位的...
    2026新人教版高中化学必修(... 2026年学生将迎来新版教材,新教材将更加重视思维和阅读!为了方便广大学生在暑假预习新学期的课本知识...
    小学二升三每天一道练习题——第... 步骤一:先算出乐乐一共有多少钱 1大杯6元,买3大杯: 6x3=18(元) 还剩4元,所以总钱数: ...
    深圳市福田区荔园小学学子亮相央... 4月,深圳市福田区荔园小学(通新岭)205名学子受邀登上中央广播电视总台《2026 CMG 4・23...