如何计算包含无循环键的字符串

问题描述 投票:-1回答:2

我想在不使用任何循环的情况下计算包含我的钥匙的字符串。

您会在下面的代码中找到所需的内容。我正在寻找答案,但我发现函数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;
}
c++ vector contains
2个回答
1
投票

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

尽管第一个版本比此递归版本要好得多。


1
投票

问题是您正在搜索与键匹配的字符串。您需要查找包含密钥的字符串。您可以这样做:

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;
© www.soinside.com 2019 - 2024. All rights reserved.