我有一个字符串,想要计算其中的某些元素。我写了一个代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
由于std :: count应该返回等于另一个元素(指定为函数的第三个参数)的元素数,或者通过将元素一对一传递给该函数而满足某个函数的元素数,因此我希望它可以将chars传递给我lambda函数。我在CPPreference的最后一个示例中撰写了大部分内容,但是看起来它的工作方式并非我期望的那样。在编译期间,我的lambda函数遇到错误:
/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/predefined_ops.h:241:17:错误:无效的操作数转换为二进制表达式(“ char”和“ const(/home/keddad/CLionProjects/olimp/main.cpp:12:39处的lambda)”)){return * __ it == _M_value; }
因此,似乎count将某种常量传递给我的little函数,稍后它将尝试将其与char比较(并丢弃错误)。如何使我的代码正常工作?std :: count实际如何工作?
std::count需要三个参数:两个迭代器和一个要比较的值。因此,它正在尝试将lambda与字符串中的每个字符进行比较。
std::count_if 接受三个参数:两个迭代器和一个“可调用”对象,用于字符串中的每个字符。
正如@ piotr-skotnicki所说,我怀疑您想使用count_if。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |