Количество вхождений паттерна в строке C++

266
02 апреля 2017, 05:05

Привет всем! Как посчитать количество вхождений паттерна regex в сроке? Язык С++

    std::string subject("This is a test test");
    try {
        std::regex re("\\w+");
        std::sregex_iterator next(subject.begin(), subject.end(), re);
        std::sregex_iterator end;
        while (next != end) {
            std::smatch match = *next;
            std::cout << match.str() << "\n";
            std::cout << match.size() << " count" << std::endl;
            next++;
        }
    }
Answer 1

Используйте std::distance:

Возвращает количество элементов между first и last.

Вот пример:

#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
    std::regex  re("\\w+");
    std::string subject("This is a test test");
    std::ptrdiff_t match_count(std::distance(
        std::sregex_iterator(subject.begin(), subject.end(), re),
        std::sregex_iterator()));
    std::cout << match_count << std::endl;
    return 0;
}

Демо на IDEONE.com

Всего 5 вхождений искомого шаблона.

READ ALSO
Не работает метод write.string(*str) в rapidjson, как решить?

Не работает метод write.string(*str) в rapidjson, как решить?

На вход в json передаю vector<string>vecs, но выдает ошибку(коммит в конце), помогите решить

321
Как прочитать большой файл в QByteArray

Как прочитать большой файл в QByteArray

Не читается большой файл в QByteArray (182111787 byte):

368
Инициализация вектора в конструкторе

Инициализация вектора в конструкторе

Почему вектор инициализируется рандомным значением? Константа ещё не успевает стать -1? Как тогда сделать правильно?

317
Необработанные исключения Stack Overflow

Необработанные исключения Stack Overflow

Необработанные исключения по адресу 0x00821CC9 в пexe: 0xC00000FD: Stack overflow (параметры: 0x00000000, 0x006E2000)

359