1 条题解

  • 0
    @ 2025-4-10 20:12:34
    #include <iostream>
    #include <vector>
    #include<cstring>
    #include<regex>
    using namespace std;
    
    vector<string> splitString(string input)
    {
        vector<string>output;
        string temp1;
        // 用于分割的标点符号和空格
        const char* split=",;.:?\'\" ";
    
        // 转换为char*类型
        char* charInput=new char[input.length()+1];
        strcpy(charInput,input.c_str());
        
        // 用strtok分割输入的这句话
        char* p2=strtok(charInput,split);
        while(p2!=NULL)
        {
            output.push_back(p2);
            p2=strtok(NULL,split);
        }
        return output;
    }
    
    // 依据单词进行联想
    vector<string> lenovo(vector<string> inputWords,string pre)
    {
        vector<string> output;
        output.push_back(pre);
    
        // 设定正则表达式,找到以pre开头的单词
        string patternText="\\b"+pre+"\\w*";
        regex pattern(patternText);
    
        for(auto word:inputWords)
        {
            bool ret=regex_match(word,pattern);
            // 匹配了还要看这里是否有重复的
            if(ret)
            {
                bool flag=false;
                for(auto out:output)
                    if((out.compare(word))==0)
                            flag=true;
                if(!flag)
                    output.push_back(word);
            }
        }
        return output;
    }
    
    int main(int argc, char *argv[])
    {
        string input;
        // 输入带空格的字符串要用getline
        getline(cin,input);
        string pre;
        cin>>pre;
        vector<string> splited=splitString(input);
        vector<string> lenovod=lenovo(splited,pre);
        for(auto word:lenovod)
            cout<<word<<" ";
    }
    
    
    • 1

    信息

    ID
    57
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    234
    已通过
    71
    上传者