Регулярное выражение с++
Задача - получить все коэффициенты у многочлена который задан строкой
Написал регулярное выражение
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