2016-04-29 3 views
-1

Ich versuche ein Programm zu erstellen, das eine Polynomgleichung aus einer Datei extrahiert und addiert, subtrahiert, oder multipliziert die zwei Polynome zusammen (abhängig vom mittleren Operanden). Allerdings bekomme ich zwei Compilerfehler, die ich nicht ganz nachvollziehen kann.Fehler mit atoi ("Argument des Typs 'int *' ist nicht kompatibel mit dem Typ 'const char *'") und Hinzufügen von Arrays

Die erste tritt hier:

int** getPolynomial(string polynomial, int &count, string Exponent[], string Coefficient[], int polyArray[][1]){ 
for (int i = 0; i<100; i++){ 
    for (int n = 0; n<100; n++){ 


Exponent[n] = atoi(polyArray[n][1]); 
     } 
     Coefficient[i] = atoi(polyArray[i][0]); 

} 

}

Wo ich einen Fehler bin immer "Argument vom Typ 'int *' ist nicht kompatibel mit dem Typ 'const char *'" auf den Linien Exponent[n] = atoi(polyArray[n][1]); } Coefficient[i] = atoi(polyArray[i][0]); Zweiter Fehler tritt unter nur,

int** add(int **left, int leftCount, int **right, int countRight, int &countResult){ 
for (int q; q < leftCount; q++){ 
    for (int r = 0; r < 2; r++){ 
     if (left[q][1] == right[q][r]){ 
      countResult[q][0] = left[q][0] + right[q][0]; 
     } 
    } 
} 

}

In der Zeile countResult[q][0] = left[q][0] + right[q][0];, wo der Compiler feststellt, dass der erste q "-Ausdruck einen Zeiger-zu-Objekt-Typ haben muss, obwohl ich nicht sehen kann, wie q einen Zeiger machen würde.

Vollständiger Code hier: http://pastebin.com/FsM1ydE5. Jede Hilfe in dieser Angelegenheit würde sehr geschätzt werden.

+0

Die Fehlermeldung ist ziemlich klar, nicht wahr? 'polyArray [i] [0];' ist kein 'const char *' - Typ, wie erforderlich. –

+0

Ich versuche, die Strings in Array 'Coefficient' in Arrays im Array 'PolyArray' zu konvertieren. Habe ich die Positionen der beiden Arrays vertauscht? – Hatches

+0

Der Zuweisungsoperator nimmt den Wert auf der rechten Seite und weist ihn der var auf der linken Seite zu. Das ist ein bisschen einfaches Zeug. –

Antwort

1

Sie Probleme mit Ihrem Typen:

  1. atoi eine int zurückkehrt, so müssen Sie entweder Exponent und Coefficent zu int[] ändern, oder Sie werden atoi stoppen müssen mit und weisen nur die Wert direkt.
  2. CountResult ist ein int& was bedeutet, dass es nicht indiziert werden kann. Sie müssen es zu einem int[][] machen, um es wie Sie derzeit verwenden.

Dieser Beitrag wäre ohne irgendeine Richtung unvollständig sein: Verwenden Sie vector s Ihre Polynomen darstellen. Sie können den Index verwenden, um den Exponenten anzugeben, und den Wert, um den Koeffizienten anzugeben, solange Ihre Polynome relativ dicht sind.

Jetzt geben wir string polyArray[][], die unsere Leistungen und ihre Koeffizienten in Position 0 und 1 des sekundären Arrays enthält. Und wir wollen das in vector<int> foo lesen, das unser Polynom darstellen wird. Wir konnten einfach tun:

for(auto& i : polyArray) 
    if(i[0] > size(foo)){ 
     foo.resize(i[0]); 
    } 
    foo[i[0]] = i[1]; 
} 

Nun lassen Sie uns sagen, dass wir zwei Polynome gegeben sind, die wir fassen wollen, sagen vector<int> left und vector<int> right, und wir wollen diese in einem neu errichteten Polynom zusammenzufassen: vector<int>countResult, was wir tun können dies wie folgt:

if(size(left) > size(right)) { 
    countResult.reserve(size(left)); 
    transform(cbegin(right), cend(right), cbegin(left), begin(countResult), plus<int>()); 
    countResult.insert(end(countResult), next(cbegin(left), size(right)), cend(left)); 
} else { 
    countResult.reserve(size(right)); 
    transform(cbegin(left), cend(left), cbegin(right), becing(countResult), plus<int>()); 
    countResult.insert(end(countResult), next(cbegin(right), size(left)), cend(right)); 
}