#881. AI检索

AI检索

AI检索

题目描述

请你实现一个简单的AI数据检索系统。系统会接收用户输入的数据和关键词,然后根据关键词在数据中的匹配程度进行排序输出。

输入格式:

  • 第一行:两个部分,第一个整数表示数据数量n,第二个字符串表示关键词
  • 接下来n行:每行一个字符串,表示一条数据

输出格式:

  • 按匹配程度从高到低输出包含关键词的数据
  • 不包含关键词的数据不输出
  • 每条数据占一行

匹配规则:

  • 基础匹配:数据中包含关键词得10分
  • 位置加分:关键词出现在数据开头得5分
  • 频率加分:关键词每多出现一次得2分

示例:

输入:
3 你
"你"是一个汉字
1234567
你我他,一年级课文

输出:
你我他,一年级课文
"你"是一个汉字

解释:

  • "你我他,一年级课文":包含关键词"你"(10分)+ 开头位置(5分)= 15分
  • ""你"是一个汉字":包含关键词"你"(10分)= 10分
  • "1234567":不包含关键词,不输出

要求

请根据上述描述,补全以下代码框架:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct DataItem {
    string content;
    int matchScore;
};

// 计算匹配分数
int calculateMatchScore(const string& content, const string& keyword) {
    // 请在此实现匹配评分逻辑
}

// 比较函数,用于排序
bool compareByScore(const DataItem& a, const DataItem& b) {
    // 请在此实现比较逻辑
}

int main() {
    int dataCount;
    string keyword;
    
    cin >> dataCount >> keyword;
    cin.ignore();
    
    vector<DataItem> dataList;
    
    // 读取和处理数据
    for (int i = 0; i < dataCount; i++) {
        DataItem item;
        getline(cin, item.content);
        
        // 计算匹配分数并筛选数据
        // 请补充代码
    }
    
    // 排序数据
    // 请补充代码
    
    // 输出结果
    // 请补充代码
    
    return 0;
}

提示

  1. 基础实现:完成上述代码框架
  2. 进阶功能:添加对大小写不敏感的匹配(如关键词"hello"也能匹配"Hello")
  3. 扩展功能:支持多个关键词的检索(用空格分隔)

​注意:​请确保代码在C++98标准及以上标准能够编译运行。