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

    关键点总结

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

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

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

    相关内容

    热门资讯

    科技推荐琼雀海南麻将.怎么开挂... 有 亲,根据资深记者爆料琼雀海南麻将是可以开挂的,确实有挂(咨询软件无需...
    重大发现{科乐填大坑怎么装挂}... 有 亲,根据资深记者爆料科乐填大坑是可以开挂的,确实有挂(咨询软件无需打...
    独家发现{欢乐情怀究竟有挂吗}... 有 亲,根据资深记者爆料欢乐情怀是可以开挂的,确实有挂(咨询软件无需打开...
    实测分享四海互娱.究竟有挂吗√... 有 亲,根据资深记者爆料四海互娱是可以开挂的,确实有挂(咨询软件无需打开...
    独家分享{新毛豆炸金花开挂神器... 有 亲,根据资深记者爆料新毛豆炸金花是可以开挂的,确实有挂(咨询软件无需...
    重磅消息欢聚斗地主.到底是不是... 有 亲,根据资深记者爆料欢聚斗地主是可以开挂的,确实有挂(咨询软件无需打...
    我来教教您{丫丫诗词到底有挂吗... 有 亲,根据资深记者爆料丫丫诗词是可以开挂的,确实有挂(咨询软件无需打开...
    实测讲解官方正版炸金花.到底是... 有 亲,根据资深记者爆料官方正版炸金花是可以开挂的,确实有挂(咨询软件无...
    我来教教您{六六顺牛牛可以开挂... 有 亲,根据资深记者爆料六六顺牛牛是可以开挂的,确实有挂(咨询软件无需打...
    我来教教您{川滇互娱是不是有挂... 有 亲,根据资深记者爆料川滇互娱是可以开挂的,确实有挂(咨询软件无需打开...