相似度计算 第33次CCF-CSP计算机软件能力认证

https://www.acwing.com/problem/content/5723/

注意点:

1.集合去重单词

2.getline()最后回车需要忽视

3.一些bulit in函数 如下:

字符转小写

#include <cctype>

tolower(ch)

字符串转小写

#include <algorithm>

transform(str.begin(), str.end(), str.begin(), ::tolower)

字符串提取单词

#include <sstream>

string sentence = "This is a test string.";

istringstream iss(sentence); // 构造输入流

string word;

vector<string> words;

while (iss >> word) {

words.push_back(word); // 提取每个单词

}

寻找自定义分隔符

size_t start = 0, end;

while ((end = sentence.find(' ', start)) != std::string::npos) {

words.push_back(sentence.substr(start, end - start));

start = end + 1;

}

words.push_back(sentence.substr(start)); // 最后一个单词

#集合取交集并集

#include <algorithm>

set<int> result;

set_union(set1.begin(), set1.end(),

set2.begin(), set2.end(),

inserter(result, result.begin()));

set_intersection(set1.begin(), set1.end(),

set2.begin(), set2.end(),

inserter(result, result.begin()));

set_difference()(差集)

vector寻找元素

find(words2.begin(),words2.end(),word)!=words2.end()


Accept代码:

cpp 复制代码
#include<iostream>
#include<string>
#include<set>
#include<sstream>
#include <algorithm>
#include<vector>
using namespace std;
int n, m;
string transfer(string s) {
    string result;
    for (char c : s) {
        if (c >= 'A' && c <= 'Z') {
            result += (char)(c - 'A' + 'a');  // 转成小写
        }
        else {
            result += c;  // 小写字母或其他字符原样加
        }
    }
    return result;
}

int main() {
    //初始化
    string s1, s2;
    vector<string> words1, words2;
    string word;
    set<string> u,u1,u2;//并集

    //输入流
    cin >> n >> m;
    cin.ignore();
    getline(cin, s1);
    getline(cin, s2);
    istringstream iss1(s1);
    istringstream iss2(s2);
    while (iss1 >> word) {
        word = transfer(word);
        words1.push_back(word);
    }
    while (iss2 >> word) {
        word = transfer(word);
        words2.push_back(word);
    }

    //解决问题
    for (string word : words1) {
        u1.insert(word);
        u.insert(word);
    }
    for (string word : words2) {
        u2.insert(word);
        u.insert(word);
    }
    int ii = 0, uu = u.size();
    for (string word : u1) {
        if (u2.find(word) != u2.end()) {
            ii++;
        }
    }
    cout << ii << endl;
    cout << uu;
    return 0;
}
相关推荐
2401_892070982 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei2 天前
Visual Studio 配置C++opencv
c++·学习·visual studio
Wenweno0o2 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming6662 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch89182 天前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳2 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发2 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense2 天前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎2 天前
STL 栈 队列
开发语言·c++
勿忘,瞬间2 天前
数据结构—顺序表
java·开发语言