我想在不使用任何循环的情况下计算包含我的钥匙的字符串。
您会在下面的代码中找到所需的内容。我正在寻找答案,但我发现函数std:find但没有帮助
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
std::vector<string> vec = { "ranaf", "ban", "Ploan", "Bar", "barour", "banriir" };
string key = "an";
if(std::find(vec.begin(), vec.end(), key) != vec.end()) {
cout << ("YES") <<endl;
}
return 0;
}
count_if似乎要走的路(未经测试的代码即将出现)
int howMany = std::count_if(vec.begin(), vec.end(),
[&key](const string& i) { return i.find(key) != string::npos; });
循环少一点(也未经测试)
template<typename it, typename func>
int CountIt(it begin, it end, func fun) {
if (begin == end) return 0;
return CountIt(std::next(begin), end, fun)+fun(*begin)?1:0;
}
int howMany2 = CountIt(vec.begin(), vec.end(),
[&key](const string& i) { return i.find(key) != string::npos; });
尽管第一个版本比此递归版本要好得多。
问题是您正在搜索与键匹配的字符串。您需要查找包含密钥的字符串。您可以这样做:
std::vector<string> vec = { "ranaf", "ban", "Ploan", "Bar", "barour", "banriir" };
string key = "an";
if (std::find_if(vec.begin(), vec.end(), [key](const string& s)
{
return s.find(key) != std::string::npos;
})
!= vec.end())
{
cout << ("YES") << endl;
}
return 0;
用于计数:
std::vector<string> vec = { "ranaf", "ban", "Ploan", "Bar", "barour", "banriir" };
string key = "an";
int count = count_if(vec.begin(), vec.end(), [key](const string& s)
{
return s.find(key) != std::string::npos;
});
cout << count << endl;