У меня есть строка, и я хочу рассчитывать на определенные элементы в ней.Я написал код:
#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 должен возвращать количество элементов, равное другому элементу (указанному в качестве третьего параметра функции) или удовлетворяющее определенной функции, передавая элементы по одному- я ожидаю, что она передаст символы в мою лямбда-функцию.Я писал в основном как в последнем примере на CPPreference , но похоже, что он работает не так, как я ожидаю.Во время компиляции я сталкиваюсь с ошибкой в моей лямбда-функции:
/ bin /../ lib / gcc / x86_64-linux-gnu / 8 /../../../../include / c ++ / 8 / bits / предопределенный_ops.h: 241: 17: ошибка: недопустимые операнды для двоичного выражения ('char' и 'const (лямбда в /home/keddad/CLionProjects/olimp/main.cpp:12:39)') {return * __ it == _M_value;}
Похоже, что count передает некоторую константу моей маленькой функции, которая позже пытается сравнить ее с char (и сбрасывает ошибку).Как я могу заставить мой код работать?Как на самом деле работает std :: count?