Регулярное выражение с++

Задача - получить все коэффициенты у многочлена который задан строкой

Написал регулярное выражение

void get_coeff(std::string polynomial) 
{
    std::regex regular(".*([-\\+][0-9]*)\\*x.*");
    std::cmatch result;

    if(std::regex_search(polynomial.c_str(),result,regular)){
        for(int index = 0; index < result.size(); ++index){
        std::cout << result[index] << std::endl;
        }
    }else{
        std::cout << "No\n";
    }
}

int main(int argc, char** argv){
     get_coeff("-3*x^100+2*x^76-123*x^2+10");

    return 0;
}

На выходе так

-3*x^100+2*x^76-123*x^2+10
-123

только последний коэффициент выводится: -123

нужно получить : [-3,2,-123]

В чем я ошибся?


Ответы (1 шт):

Автор решения: Andrej Levkovitch

У вас абсолютно не верно составлена регулярка, изучите что означают символы в регулярном выражении, но пока могу поделится "правильным" выражением:

void get_coeff(std::string polynomial) {
  std::regex regular(R"(([-\+][0-9]*)(?=\*))");
  std::cmatch result;

  std::copy(
      std::sregex_token_iterator{polynomial.begin(), polynomial.end(), regular},
      std::sregex_token_iterator{},
      std::ostream_iterator<std::string>(std::cout, "\n"));
}

Вывод:

-3
+2
-123
→ Ссылка