我有一个字符串,想计算其中的某些元素。我写了一个代码:
#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 ::计数应返回等于另一个元素(指定为函数的第三参数)的元素数量,或者通过一对一传递到该功能而符合某些函数的元素,我希望它通过对我的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)') {返回 *__ it == _m_value;}
因此,看起来计数传递给我的小函数某种常数,后来试图将其与char(并删除错误)进行比较。如何使我的代码工作?STD :: Count实际上有效吗?
std::count
采用三个参数:两个迭代器和一个值得比较的值。因此,它试图将lambda与字符串中的每个字符进行比较。
std::count_if
采用三个参数:为字符串中的每个字符调用两个迭代器和一个"可呼叫"。
正如 @piotr-skotnicki所说,我怀疑您想使用count_if
。