Zum Inhalt springen

Eine Formel ausrechnen


Patrick.Karre

Empfohlene Beiträge

Hallo Leute,

ich habe folgendes Problem, ich habe einen String mit einer Formel:

a=10+5*10*5

In die Variable a soll das Ergebnis hinter dem gleichheitszeichen eingetragen werden. In diesem Fall also 260. Das Speichen in die Variable klappt soweit, nur das Rechnen leider nicht. Ich schneide immer einen Teil aus dem String aus, errechne diesen und schreibe ihn mit der Replace Funktion zurück, dabei wird leider nicht immer sauber ersetzt.

Hier ist der Code zum errechnen:


double calculate(string strEingabe)

{

	// Überprüfung nach Klammern -> REKURSION

	int iPos = strEingabe.find_first_of('(');


	if (iPos != -1)

	{

		int iNext = strEingabe.rfind(')');

		strEingabe.replace(iPos, iNext-iPos, doubleToString(calculate(strEingabe.substr(iPos+1, iNext-iPos-1))));

	}


	// Berechnen der Eingabe.

	double dNumber=0, dFirstNumber=0, dLastNumber=0, dResult=0;;

	char cCalculator[4] = {'*', '/', '+', '-'};


	for (int i=0; i < sizeof(cCalculator) / sizeof(cCalculator[0]); ++i)

	{

		iPos = strEingabe.find_first_of(cCalculator[i]);


		while (iPos != -1)

		{

			// Wir müssen nach den jeweiligen Operatoren suchen.

			int iLeft=0, iRight=0;


			for (int j=iPos-1; j >= 0; --j)

			{

				iLeft = j;


				if (IsOperator(strEingabe[j]))

					break;

			}


			for (int j=iPos+1; j <= strEingabe.length(); ++j)

			{

				iRight = j;


				if (IsOperator(strEingabe[j]))

					break;

			}


			// Wir holen uns den String zum berechnen und setzen diesen wieder in den restlichen String ein.

			dResult = calculator(atof(strEingabe.substr(iLeft, iPos).data()), atof(strEingabe.substr(iPos+1, iRight).data()), cCalculator[i]);

			strEingabe.replace(iLeft, iLeft+iRight, doubleToString(dResult));


			// Nächste Position für den Start bestimmen.

			iPos = strEingabe.find_first_of(cCalculator[i], iPos+1);

		}

	}


	return atof(strEingabe.data());

}

Wo liegt der Fehler, über eine Hilfe würde ich mich freuen.

Beste Grüße und gutes neues

Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...