Задача стоит в создании некого калькулятора для многочленов с несколькими переменными, но никак не получается заставить код принимать 2 переменные x y

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int str_to_int(string &s, int begin, int end){ 
    int val = 0;               
    bool negative = 0;          
    if(s[begin] == '+') begin++;
    else{
        if(s[begin] == '-'){   
            negative = 1;
            begin++;
        }
    }
    for(auto i = begin; i < end; ++i){  
        val *= 10;
        val += s[i] - 48;
    }
    if(val == 0 && s[begin] != '0') val++; 
    if(negative == 1) val *= -1;
    return val;
}
 
string int_to_str(int val){ 
    string s, tmp;
    if(val > 0) s.push_back('+'); 
    else{
        val *= -1;
        s.push_back('-');
    }
    while(val > 0){
        tmp.push_back(val%10 + 48); 
        val /= 10;
    }
    for(int i = tmp.size()-1; i >= 0; --i){ 
        s.push_back(tmp[i]);
    }
    return s;
}
 
void erase_the_plus(string &s){  
    if(s[0] == '+') s.erase(s.begin());
}
 
void erase_the_one(string &s){ 
    if((s[1] == '1') && (s.size() == 2)) s.erase(s.begin()+1);
}
 
void analyze(string &s, vector <int> &v){  
    if(s.find("x") == string::npos) v[0] += str_to_int(s, 0, s.size()); 
    else{
        if(s.find("^") == string::npos) v[1] += str_to_int(s, 0, s.find("x"));  
        else{
            int power = str_to_int(s, s.find("^") + 1, s.size()); 
            v[power] += str_to_int(s, 0, s.find("x"));
        }
    }
}
 
vector <int> decompose(string &s){ 
    vector <int> v(11);
    string cur_s;
    int i = 0;
    while(i < s.size()){
        cur_s.clear();
        cur_s.push_back(s[i]);
        i++;
        while((s[i] != '+') && (s[i] != '-') && (i < s.size())){ 
            cur_s.push_back(s[i]);
            i++;
        }
        analyze(cur_s, v);
    }
    return v;
}
 
vector <int> multiplicate (vector <int> &a, vector <int> &b){ 
    vector <int> c(21);       
    for(int i = 0; i < c.size(); ++i) c[i] = 0;
    for(int i = 0; i < a.size(); ++i){
        for(int j = 0; j < b.size(); ++j){
            c[i + j] += a[i] * b[j];
        }
    }
    return c;
}
 
string compose(vector <int> &v){ 
    string s;
    for(int i = v.size() - 1; i >= 2; --i){
        if(v[i] != 0){
            string coef = int_to_str(v[i]); 
            erase_the_one(coef);
            s = s + coef;
            s.push_back('x');
            s.push_back('^');
            string power = int_to_str(i);  
            erase_the_plus(power);
            s = s + power;
        }
    }
    if(v[1] != 0){   
        string coef = int_to_str(v[1]);
        erase_the_one(coef);
        s = s + coef;
        s.push_back('x');
    }
    if(v[0] != 0){
        s = s + int_to_str(v[0]);
    }
    return s;
}
 
int main() {
    string a,b;
    vector <int> a_decomposed(11, 0);
    vector <int> b_decomposed(11, 0);
    getline(cin, a);   
    getline(cin, b);
    a_decomposed = decompose(a);
    b_decomposed = decompose(b);
    vector <int> c_decomposed = multiplicate(a_decomposed, b_decomposed);
    string c = compose(c_decomposed);
    erase_the_plus(c); 
    if(c.size() > 0) cout << c;
    else cout << 0;     
    return 0;
}

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