#include <iostream>
#include <sstream>
#include <vector>
#include <utility>
std::istream& Char( std::istream& is,
char ch,
bool skipws = true )
{
if( skipws )
is >> std::ws;
if( is.get() != ch )
is.setstate( std::ios_base::failbit );
return is;
}
int main()
{
std::istringstream stream("2x^4-5x^3+3.5x^2+2x-5");
using Real = double;
std::vector<std::pair<Real, Real>> values;
for(;;)
{
Real a, b;
if( !(stream >> std::ws >> a) )
break;
bool succeeded_x = false;
if( !Char(stream, 'x')
|| (succeeded_x = true, !Char(stream, '^')) )
{
stream.clear();
stream.unget();
b = succeeded_x;
}
else if( !(stream >> std::ws >> b) )
break;
values.emplace_back(a, b);
if( stream.peek() != '+'
&& stream.peek() != '-' )
break;
}
for( auto const& p : values )
std::cout << p.first << " * x^" << p.second << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdGQ6OmlzdHJlYW0mIENoYXIoIHN0ZDo6aXN0cmVhbSYgaXMsCiAgICAJCQkgICAgY2hhciBjaCwKCQkJCQlib29sIHNraXB3cyA9IHRydWUgKQp7CglpZiggc2tpcHdzICkKCQlpcyA+PiBzdGQ6OndzOwoJaWYoIGlzLmdldCgpICE9IGNoICkKCQlpcy5zZXRzdGF0ZSggc3RkOjppb3NfYmFzZTo6ZmFpbGJpdCApOwoJcmV0dXJuIGlzOwp9CgppbnQgbWFpbigpCnsKCXN0ZDo6aXN0cmluZ3N0cmVhbSBzdHJlYW0oIjJ4XjQtNXheMyszLjV4XjIrMngtNSIpOwoKCXVzaW5nIFJlYWwgPSBkb3VibGU7CgoJc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPFJlYWwsIFJlYWw+PiB2YWx1ZXM7CgoJZm9yKDs7KQoJewoJCVJlYWwgYSwgYjsKCgkJaWYoICEoc3RyZWFtID4+IHN0ZDo6d3MgPj4gYSkgKQoJCQlicmVhazsKCgkJYm9vbCBzdWNjZWVkZWRfeCA9IGZhbHNlOwoJCWlmKCAhQ2hhcihzdHJlYW0sICd4JykKCQkgfHwgKHN1Y2NlZWRlZF94ID0gdHJ1ZSwgIUNoYXIoc3RyZWFtLCAnXicpKSApCgkJewoJCQlzdHJlYW0uY2xlYXIoKTsKCQkJc3RyZWFtLnVuZ2V0KCk7CgkJCWIgPSBzdWNjZWVkZWRfeDsKCQl9CgoJCWVsc2UgaWYoICEoc3RyZWFtID4+IHN0ZDo6d3MgPj4gYikgKQoJCQlicmVhazsKCgkJdmFsdWVzLmVtcGxhY2VfYmFjayhhLCBiKTsKCgkJaWYoIHN0cmVhbS5wZWVrKCkgIT0gJysnIAoJCSAmJiBzdHJlYW0ucGVlaygpICE9ICctJyApCgkJCWJyZWFrOwoJfQoKCWZvciggYXV0byBjb25zdCYgcCA6IHZhbHVlcyApCgkJc3RkOjpjb3V0IDw8IHAuZmlyc3QgPDwgIiAqIHheIiA8PCBwLnNlY29uZCA8PCAnXG4nOwp9