我有一个字符串,想要计算其中的某些元素。我写了一个代码:
#include <iostream>
#include <set>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string a;
cin >> a;
int b = count(a.begin(), a.end(), [](char g) {return (g == '"' or g == '.' or g == ',' or g == ';' or g == ':' or g == '!' or g == '?');});
cout << b;
}
由于std :: count应该返回等于另一个元素的元素数(指定为函数的第三个参数)或者通过将元素逐个传递给该函数来满足某些函数,我希望它将字符传递给我lambda函数。我在CPPreference的最后一个例子中写的很多,但看起来它的工作方式并不像我期望的那样。在编译期间,我在lambda函数中遇到错误:
/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/predefined_ops.h:241:17:错误:操作数无效二进制表达式('char'和'const(lambda at /home/keddad/CLionProjects/olimp/main.cpp:12:39)'){return * __ it == _M_value; }
所以看起来像count将一些常量传递给我的小函数,后来尝试将它与char(并删除错误)进行比较。如何让我的代码工作? std :: count实际上是如何工作的?
std::count
有三个参数:两个迭代器和一个要比较的值。所以它试图将lambda与字符串中的每个字符进行比较。
std::count_if
有三个参数:两个迭代器和一个为字符串中的每个字符调用的“可调用”。
正如@ piotr-skotnicki所说,我怀疑你想要使用count_if
。