我有两个向量:a
和b
。我想检查b
中的一个单词是否可以在a
中找到。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> a = {"abcd", "efgh","ijkl"};
vector<string> b = {"efg","mno"};
for(int j = 0; j < b.size(); ++j) {
if (find(a.begin(), a.end(), b[j]) != a.end()) {
cout << b[j] << endl;
}
}
return 0;
}
我试着这样做:通过向量a
进行循环,并将元素彼此进行比较。我期望输出"efg"
,但它什么也不打印。
这是什么原因呢?
2条答案
按热度按时间xdnvmnnf1#
我试着这样做:made循环通过向量
a
并将元素彼此进行比较。你的想法很好,但你的方法需要一些调整。
std::find()
查找 exact 匹配,但"efg"
在a
中不作为一个完整的元素存在。您需要执行 partial 匹配,因为"efg"
是a
中"efgh"
元素的 * 子字符串 *。你可以使用
std::find_if()
代替,使用std::string::find()
进行子字符串搜索,例如:Online Demo
bjp0bcyl2#
你所做的所有比较(显式地或使用
std::find
)都将比较整个字符串。你需要找到 substrings。你可以循环遍历
a
向量,然后遍历b
向量,并检查b
中的每个元素是否可以在a
的元素中找到: