Разделите предложение на вектор его слов - PullRequest
1 голос
/ 07 мая 2020
    std::string rule = "aa|b";
    std::string curr;
    std::vector<std::string> str;
    int k = 0;
    while (k < rule.size())
    {
        while (rule[k] != '|' )
        {
            curr.push_back(rule[k]);
            k++;
        }
        str.push_back(curr);
        curr.clear();
        k++;
    }
    for (size_t i = 0; i < str.size(); i++)
    {
        std::cout << str[i] << "\n";
    }

Я хочу просто разделить «aa» и «b» и иметь их в векторе в виде строк. Это вызывает у меня исключение:

Unhandled exception at 0x7A14E906... An invalid parameter was passed to a function that considers invalid parameters fatal;

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Этот l oop

while (rule[k] != '|' )
{
    curr.push_back(rule[k]);
    k++;
}

будет продолжать работать без конца после того, как вы найдете последний '|', с неопределенным поведением в результате.

Это проще для решения с использованием stringstream и '|' в качестве разделителя «строки».

std::istringstream is(rule);
std::string word;
while (std::getline(is, word, '|'))
{
    str.push_back(word);
}
0 голосов
/ 07 мая 2020

Вы также можете просто использовать boost::split:

   #include <boost/algorithm/string.hpp>

   std::vector<std::string> strs;
   boost::split(strs, "this|is|a|simple|example", boost::is_any_of("|"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...