Problem mit kleinem mathematischen Parser



  • Hi,
    ich bin dabei mir einen kleinen mathematischen Parser zu schreiben. Zu beginn will ich zwecks Test nur einmal die Addition berücksichtigen. Leider hat sich irgendwo ein Fehler eingeschlichen den ich nicht finde, vielleicht seid ihr so nett und helft mir.

    #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	string sEingabe;
    	cout<<"Bitte den Therm eingeben: "<<endl;
    	cin>>sEingabe;
    
    	int iLaenge = sEingabe.length();
    	int iAnzZeichen = 0;
    	int iSumme = 0;
    	int iTeil = 0;
    
    	for(int i = 0;i <= iLaenge;i++)  //Berechnung der Anzahl der Rechenzeichen
    	{
    		if(!isdigit(sEingabe[i]))
    			iAnzZeichen++;
    	};
    
    	for(int j = 0; j <= iAnzZeichen+1;j++) 
    	{
    		bool Rechenzeichen = false;
    
    		int iPos;
    		if(!isdigit(sEingabe[j])) // Ermittlung des 1. Vorkommens eines Rechenzeichens      
    		{
    			iPos = j; 
    			Rechenzeichen = true;
    		}
    		if(Rechenzeichen = false) // falls nur noch ein Teil des Terms vorhanden ist
    			iPos = sEingabe.length();
    
    		string sTeil;
    		sTeil.assign(sEingabe,0,iPos); 
                stringstream Str;  //String konvertieren nach int
    		Str<<sTeil;       
    		Str>>iTeil;        
    		iSumme = iSumme+iTeil; //eigentliche Berechnung
    		iTeil = 0;
    		sEingabe.erase(0,iPos); // löschen einschließlich des Rechenzeichens
    
    	}
    	cout<<iSumme<<endl;
    
    	return 0;
    }
    

    Danke für eure Hilfe!



  • ++anfänger++ schrieb:

    Leider hat sich irgendwo ein Fehler eingeschlichen den ich nicht finde...

    ???
    Wie äußert der sich?



  • tschuldigung...
    Der Fehler ist, dass die Berechnung anscheinend nicht stattfindet.



  • Vielleicht liegts ja am Semikolon nach der for-Schleife.



  • Nein am Semikolon nach der For-Schleife liegt es auch nicht.
    aber danke



  • Könntest du nochmal etwas genauer beschreiben, welcher Fehler auftritt? In welcher Berechnung?

    if(Rechenzeichen = false) // falls nur noch ein Teil des Terms vorhanden ist
    

    Ausserdem kommen bei der if-Abfrage zwei ==.



  • Danke, hat sich von alleine gelöst.
    Es ist der Fehler aufgetreten, dass die Berechnung nie stattgefunden hat, sprich bei der Eingabe: 12+2 war die Ausgabe 12. Der Fehler war folgender:

    if(!isdigit(sEingabe[j])) // Ermittlung des 1. Vorkommens eines Rechenzeichens 
            {
                iPos = j; 
                Rechenzeichen = true;
            }
            if(Rechenzeichen == false) 
                iPos = sEingabe.length();
    

    j entspricht der Anzahl der Rechenzeichen, d.h. bei einem Rechenzeichen wäre nur der erste Buchstabe der Eingabe überprüft worden. D.h. ich habe die obrige Abfrage in eine For-Schleife for(int z = 0; z=! sEingabe.length();z++)... schreiben müssen.
    Tut mir leid dass ich deswegen eure Zeit in Anspruch genommen habe, aber ich hab sehr lange nach dieser Kleinigkeit gesucht.
    Ciao



  • @++anfänger++
    Mit dem Debugger tust du dich leichter, solch einen Fehler zu finden ;).


Log in to reply