C++中判断vector b元素是否在vector a中无输出问题排查
问题原因
问题出在你对std::find的用法理解有误——它对字符串做的是完全匹配,也就是必须两个字符串完完全全一模一样才算找到,而不是你预期的“子串包含”。
你看,容器a里的元素是"abcd"、"efgh"、"ijkl",b里的第一个元素是"efg",和a里的"efgh"差了一个h,自然匹配不上,所以代码没输出。
两种修正方向
如果你想实现“检查b的元素是否是a中元素的子串”,得换个写法,遍历a的每个元素,用字符串的find方法判断包含关系:
#include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> a = {"abcd", "efgh","ijkl"}; vector<string> b = {"efg","mno"}; for(const auto& target : b) { bool is_found = false; for(const auto& str : a) { // 检查target是否是str的子串 if(str.find(target) != string::npos) { is_found = true; break; } } if(is_found) { cout << target << endl; } } return 0; }
这段代码运行后会输出efg,符合你的预期。
要是你本来就想做完全匹配,那只要把b里的"efg"改成"efgh",原代码就能正常输出了。
内容的提问来源于stack exchange,提问作者Luka Bitsadze
相关产品推荐
相关产品推荐

