Как с помощью std::count() подсчитать количество совпадений
Пытаюсь разобраться в работе std::count()
Дано: массив типа std::array<int,10> с произвольными 10-ю значениями.
Я хочу посчитать количество вхождений, допустим, цифры 5.
#include <algorithm>
#include <array>
#include <iostream>
int main()
{
std::array<int,10> array;
array = { 1,2,5,35,4,7,23,6,5,7};
auto result{ std::count(array.begin(), array.end(), 5) };
std::cout << "Array contains: " << result << " values.";
}
Как итог: Array contains: 2 values. В данном массиве находятся 2 совпадения, однако мне бы хотелось, чтобы алгоритм учитывал еще и число 35, т.к. 5 в него входит как цифра. Подскажите, как можно это реализовать?
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
auto result{ std::count_if(array.begin(), array.end(),
[](int n) { for(;n;n/=10) if (n%10==5) return true; return false; })};
Будет считать количество чисел, в которых есть цифра 5.
Если надо все пятерки -
auto result = accumulate(array.begin(), array.end(), 0,
[](int s, int n) {
for(;n;n/=10)
if (n%10==5) s++;
return s;
});
Автор решения: AR Hovsepyan
→ Ссылка
Может считать и std::count, если рассматривать числа посимвольно:
std::array<int, 10> array;
array = { 1,2,355,35,4,7,23,6,5,7 };
const int val = 5;
std::stringstream s;
std::copy(array.begin(), array.end(), std::ostream_iterator<int>(s));
std::cout << "Array contains: " << s.str() << '\n'
<< std::count(std::istream_iterator<char>(s), std::istream_iterator<char>(), val + '0')
<< " values.";