Я пытаюсь настроить функцию чтения регулярных выражений. C ++ - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть строка с несколькими словами, и я хочу поместить эти слова в вектор, чтобы я мог манипулировать каждым словом как отдельным объектом. проблема в том, что когда я использую функцию regexp_search (string, match, regexp) после нахождения первого совпадения, я пытаюсь удалить все, что было в строке, до того, как найдено слово для совпадения, но вызываю функцию match.suffinx (). str () возвращает emply string, когда он должен возвращать другие слова из этой строки.

вот мое регулярное выражение:

std::regex reg("([C-Fc-f]at)");

вот моя функция:

std::vector<string> stringToVector(string str, regex reg){
cout << boolalpha;
vector<string> vec;
smatch match;


while (regex_search(str, match, reg))
{
    vec.push_back(match.str(1));
    str = match.suffix().str();
}
return vec;}

1 Ответ

0 голосов
/ 23 апреля 2020

Ваш код, кажется, в порядке. В целях тестирования я сначала исправил вашу функцию для вывода результатов ...

std::vector<std::string> stringToVector(std::string str, std::regex reg) {
    std::vector<std::string> vec;
    std::smatch match;

    while (std::regex_search(str, match, reg))
    {
        std::cout << "Match\n";
        std::cout << "match.str() = " << match.str() << '\n';
        std::cout << "match.suffix() = " << match.suffix() << '\n';

        vec.push_back(match.str());
        str = match.suffix();
        std::cout << "str = " << str << "'\n\n";
    }
    return vec;
}

Затем в Main я позвонил stringToVector и напечатал результаты ...

std::regex reg("([C-Fc-f]at)");

std::vector<std::string> v;
v = stringToVector("Cat fat rat bat", reg);

for (auto itr = v.begin(); itr != v.end(); ++itr)
{
    std::cout << *itr << '\n';
}

Вот вывод ...

Match
match.str() = Cat
match.suffix() =  fat rat bat
str =  fat rat bat'

Match
match.str() = fat
match.suffix() =  rat bat
str =  rat bat'

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