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;
}