I almost have my overloaded += operator working. I just need some help polishing it. My problem is that if I put one list as +4x^4 and the other list as +3x^3+2x^2 then the list stays stuck on the first term of the first list. Can anyone throw me a bone.
#include <string>
#include <iostream>
using namespace std;
struct TermType
{
int coefficient;
int exponent;
bool NegCoef;
TermType* next;
};
class Polynomial
{
private:
TermType* head;
public:
// default constructor: create an empty polynomial
Polynomial();
// copy constructor: use the content of p1 to create a polynomial
Polynomial(const Polynomial& p1);
// destructor
// release dynamic memory related to the polynomial
//~Polynomial();
// overloaded assignment operator
// assign the content of p1 to a polynomial
void operator=(const Polynomial& p1);
// overloaded += operator
// add a polynomial
void operator+=(const Polynomial& p1);
// overloaded -= operator
// subtract a polynomial
void operator-=(const Polynomial& p1);
// read a polynomial
void read();
// output a polynomial
void print();
//new input function
void insertTerm(bool,int,int);
};
Polynomial::Polynomial()
{
head=NULL;
}
void Polynomial::operator+=(const Polynomial& p1)
{
//cout<<"Start print"<<endl;
TermType* poly1=head;
TermType* poly2=p1.head;
int counter=0;
while ((poly1!=NULL)||(poly2!=NULL))
{
//counter++;
if (poly2==NULL&&poly1!=NULL)
{
if (poly1->coefficient>0)
cout<<"+";
if (poly1->coefficient<0)
cout<<"-";
cout<<poly1->coefficient<<"x^"<<poly1->exponent;
poly1=poly1->next;
}
if (poly1==NULL&&poly2!=NULL)
{
if (poly2->coefficient>0)
cout<<"+";
if (poly2->coefficient<0)
cout<<"-";
cout<<poly2->coefficient<<"x^"<<poly2->exponent;
poly2=poly2->next;
}
if (poly1!=NULL&&poly2!=NULL)
{
if (poly1->exponent==poly2->exponent)
{
if(poly1->coefficient+poly2->coefficient>0)
cout<<"+";
if(poly1->coefficient+poly2->coefficient<0)
cout<<"-";
cout<<poly1->coefficient+poly2->coefficient<<"x^"<<poly1->exponent;
if (poly1!=NULL)
poly1=poly1->next;
if (poly2!=NULL)
poly2=poly2->next;
continue;
}
if (poly1->exponent>poly2->exponent)
{
if (poly1->coefficient>0)
cout<<"+";
if (poly1->coefficient<0)
cout<<"-";
cout<<poly1->coefficient<<"x^"<<poly1->exponent;
poly2=poly2->next;
continue;
}
if (poly2->exponent>poly1->exponent)
{
if (poly2->coefficient>0)
cout<<"+";
if (poly2->coefficient<0)
cout<<"-";
cout<<poly2->coefficient<<"x^"<<poly2->exponent;
poly1=poly1->next;
continue;
}
/*
if (poly1->exponent<poly2->exponent)
{
if (poly1->coefficient>0)
cout<<"+";
if (poly1->coefficient<0)
cout<<"-";
cout<<poly1->coefficient<<"x^"<<poly1->exponent;
poly2=poly2->next;
continue;
}
if (poly2->exponent>poly1->exponent)
{
if (poly2->coefficient>0)
cout<<"+";
if (poly2->coefficient<0)
cout<<"-";
cout<<poly2->coefficient<<"x^"<<poly2->exponent;
poly1=poly1->next;
continue;
}
*/
}
}
}
void Polynomial::insertTerm(bool negCoef, int coef, int exp)
{
cout << "begin insert!" << endl;
cout << negCoef << " " << coef << " " << exp << endl;
TermType* newTerm = new TermType;
if (negCoef == 1)
newTerm->coefficient = 0 - coef;
else
newTerm->coefficient = coef;
newTerm->exponent = exp;
newTerm->next = NULL;
TermType* current = head;
if (head == NULL)
head = newTerm;
else
{
while (current->next != NULL)
current=current->next;
current->next = newTerm;
}
cout << "end insert!" << endl;
}
//read a polynomial
void Polynomial::read()
{
string s;
cout << "Enter a term (ex: +4x^3): ";
cin >> s;
int index = 0;
bool firstTerm = 1;
bool nowExp = 0;
bool negativeCoef = 0;
int coef = 0;
int exp = 0;
while (s[index] != '#')
{
cout << "char : " << s[index] << endl;
if (s[index] == '+' || s[index] == '-')
{
cout << "+-" << endl;
if (firstTerm == 0)
{
if (coef != 0)
insertTerm(negativeCoef, coef, exp);
}
else
{
firstTerm = 0;
}
nowExp = 0;
if (s[index] == '-')
negativeCoef = 1;
else
negativeCoef = 0;
coef = 0;
exp = 0;
}
else if (s[index] == 'x')
{
cout << "x" << endl;
if (s[index+1] != '^')
{
cout << "Incorrect formula!" << endl;
head = NULL;
break;
}
}
else if (s[index] == '^')
{
cout << "^" << endl;
nowExp = 1;
}
else if (s[index]>='0' && s[index]<='9')
{
cout << "number" << endl;
if (nowExp == 0)
coef = coef*10 + (s[index]-48);
else
exp = exp*10 + (s[index]-48);
}
else
{
cout << "The formula contains invalid characters: " << s[index] << endl;
head = NULL;
break;
}
index++;
}
if (coef != 0)
insertTerm(negativeCoef, coef, exp);
cout << "done!"<< endl;
}
void Polynomial::print()
{
TermType* newTerm=head;
while (newTerm != NULL)
{
cout<<newTerm->coefficient<<"x^"<<newTerm->exponent;
newTerm=newTerm->next;
}
cout << endl;
}
int main()
{
Polynomial p, p1;
p.read();
cout<<"Second Term:"<<endl;
p1.read();
//p.print();
//p1.print();
p+=(p1);
system ("pause");
return 0;
}