2

我有一个字符串向量,我想计算向量中的所有“Ace”。目前只能找到一个...

int main()
{
    std::vector<string> vec;
    vec.push_back("Ace of Spades");
    vec.push_back("Ace");
    string value = "Ace";
    int cnt = 0;
    auto iter = find_if(begin(vec), end(vec), [&](const string &str)
    {
        return str.find(value) != str.npos;
    });
    if(iter == end(vec))
        cout << "no found" << endl;
    else 
    {
        cout << *iter << endl;
        cnt++;
        cout << cnt++ << endl;
    }
}
4

2 回答 2

9

你可以使用std::count_if

auto cnt = count_if(begin(vec), 
                    end(vec), 
                    [&](const string& str) {
                      return str.find(value) != std::string::npos;
                    });

请注意,这仅计算包含 的字符串的数量,而不是向量元素"Ace"中出现的总数。"Ace"

于 2013-08-29T12:50:15.270 回答
1

如果您只想计算匹配元素的数量,可以使用std::count_if。如果您还需要对它们做一些事情,最好忘记标准库算法并使用 ranged for,如下所示:

int count = 0;
for (const auto& element : vec) {
    if (element.find(value) != std::string::npos) {
        std::cout << element << std::endl;
        ++count;
    }
}
std::cout << count << std::endl;
于 2013-08-29T13:04:12.390 回答