sregex_token_iterator: В примере Страуструпа есть ошибки? - PullRequest
2 голосов
/ 06 августа 2020

Я тестирую пример из Stroustrup C ++ 4th Ed, страница 1069, в котором могут быть неуказанные исправления здесь . Кто-нибудь знает, как следует изменить этот код, чтобы правильно распечатать вывод ниже? В книге утверждается, что это должен быть результат, однако мой тест ничего не дает (совпадений нет).

#include <regex>
#include <iostream>
using namespace std;

int main()
{
    string input {"aa::bb cc::dd ee::ff"};
    regex pat {R"((\w+)([[:punct:]]+)(\w+)\s∗)"};
    sregex_token_iterator end {};
    for (sregex_token_iterator p {input.begin(),input.end(),pat,{1,3}};
     p!=end; ++p)
    cout << *p << '\n';

    return 0;
}

Выходные данные по заявкам на книгу должны быть:

aa 
bb 
cc 
dd 
ee 
ff

Компиляция:

clang++ -Wall -std=c++11 -pedantic test248.cc && ./a.out

Compilation finished at Wed Aug  5 20:09:52

1 Ответ

1 голос
/ 06 августа 2020
    regex pat {R"((\w+)([[:punct:]]+)(\w+)\s∗)"};

Ваша "звездочка" в конце - это не настоящая звездочка *, а символ Юникода оператора звездочки U + 2217 . Замените его на *, и код будет работать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...