Моя проблема более или менее очевидна, я хочу написать регулярное выражение для анализа чисел из строки, которую пользователь вводит через консоль. Я принимаю пользовательский ввод, используя:
getline(std::cin,stringName); //1 2 3 4 5
Я предполагаю, что пользователь вводит N чисел, за которыми следуют пробелы, кроме последнего числа. Я решил эту проблему, проанализировав строку char с помощью char следующим образом:
std::string helper = "";
std::for_each(stringName.cbegin(), strinName.cend(), [&](char c)
{
if (c == ' ')
{
intVector.push_back(std::stoi(helper.c_str()));
helper = "";
}
else
helper += c;
});
intVector.push_back(std::stoi(helper.c_str()));
Я хочу добиться того же поведения с помощью регулярных выражений. Я написал следующий код:
std::regex rx1("([0-9]+ )");
std::sregex_iterator begin(stringName.begin(), stringName.end(), rx1);
std::sregex_iterator end;
while (begin != end)
{
std::smatch sm = *begin;
int number = std::stoi(sm.str(1));
std::cout << number << " ";
}
Проблема с этим регулярным выражением возникает, когда он достигает последнего числа, так как у него нет пробела, поэтому он входит в бесконечное число l oop. Может кто-нибудь дать мне представление о том, как это исправить?