Извлеките коэффициенты многочлена с помощью istringstream c++

в настоящее время я работаю над проектом (а именно, создаю класс многочлена), и я уже реализовал методы «сложение-вычитание-разделение и т. д.». Но я застрял на методе перехода от такой строки 3x ^ 1-2x ^ 4 к вектору коэффициентов, например 0 3 0 0 4.

Итак, вот код:

  string s;
cin >> s;
istringstream iss(s);
double coeff;
char x, sym;
int degree;
vector<double> coefficients;
int i = 0;
while (iss >> coeff >> x >> sym >> degree) {
    //if (sign == '-') coeff *= -1;
    if (degree == i) {
        cout << coeff << i;
        coefficients.push_back(coeff);
        ++i;
    }
    else {
        for (int j = i; j < degree; ++j) {
            coefficients.push_back(0);
        }
        coefficients.push_back(coeff);
        ++i;
    }
   Polynomial p (coefficients);
   p.write();

Кстати, я использую istringstream, но, к сожалению, по какой-то причине он не работает, и я не могу понять, что не так с моим кодом?? «Полином p (коэффициенты)» кажется пустым в конце. Может что-то с конструкторами?

  Polynomial::Polynomial (const vector<double>& coeff)
  : coeff(coeff)
  {}

  // Constructor from string.
  Polynomial::Polynomial (const string& spoly) : spoly(spoly) {}

Заранее спасибо!


person alienflow    schedule 26.03.2018    source источник
comment
Похоже, вам может понадобиться научиться использовать отладчик для пошагового выполнения кода. С хорошим отладчиком вы можете выполнять свою программу построчно и видеть, где она отклоняется от того, что вы ожидаете. Это важный инструмент, если вы собираетесь заниматься программированием. Дополнительная литература: Как отлаживать небольшие программы   -  person NathanOliver    schedule 26.03.2018
comment
Кроме того, почему вы извлекаете sign в конце термина? Это означает, что вам нужен последний термин, такой как 2x^3-, чтобы он был успешным.   -  person NathanOliver    schedule 26.03.2018
comment
Дело не в том, хочу ли я заниматься программированием или нет, здесь у меня есть вопрос, если кто-нибудь может помочь мне найти, что не так, я был бы очень признателен, если вы не можете, тогда лучше ничего не пишите   -  person alienflow    schedule 27.03.2018
comment
Ваши строки содержат пробелы? Как в 3x^1 -2x^4 или 3x^1 - 2x^4. В противном случае вам следует сначала проверить, работает ли извлечение изолированно: ideone.com/OgHFOF.   -  person Bob__    schedule 27.03.2018
comment
@Bob__ это определенно что-то действительно странное, даже улучшенный код, который вы опубликовали, у меня не работает, потому что я не могу войти в цикл. Но, в любом случае, многие thnxx   -  person alienflow    schedule 27.03.2018


Ответы (1)


Да, в конце концов я нашел, что не так. Я компилировал на Mac, но когда я переключился на Linux, все заработало безупречно. Итак, решением для Mac было бы написать

 cout << endl; 

в конце блока кода.

person alienflow    schedule 29.03.2018