Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

Diese beiden Sachen werden allerdings sauber errechnet. Das Problem entsteht bei der Replace Funktion:

Wenn z.B. a=10*5+10 eingegeben wird, klappt es ohne Probleme. Wenn aber a=10+5*10 eingegeben wird, kommt misst raus.

Geschrieben
Ich habe jetzt nochmal die Logig geändert und der MISST geht immer noch nicht.
Dann wird es Zeit für Fehlersuche.

Schritt eins: Funktionsaufrufe entschachteln, Zwischenergebnisse prüfen.

Geschrieben

Was meinst du mit Mist? Heist das einfach nur das dein Ergebnis falsch wird?

Wenn ja, dann musst du noch irgendwie die Priorität der Operatoren berücksichtigen.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...