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代码:
#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;
}