Arrayelement löschen



  • const char macht nur dann Sinn wenn du auch nichts verändern willst.

    Also entweder kein const verwenden oder in ein neues (nicht const) Char-Array kopieren.



  • so habs zum laufen bekommen danke 🙂

    jetzt hab ich ein anderes Problem 😛 aber zu 80% läuft mein Projekt schonmal 🙂

    Danke nochmal



  • Hast du auch an "(2+2)(3+3)" gedacht? Würde bei dir jetzt "2+2)(3+3" rauskommen.



  • Fellhuhn schrieb:

    Hast du auch an "(2+2)(3+3)" gedacht? Würde bei dir jetzt "2+2)(3+3" rauskommen.

    GENAU das ist mein nächstes Problem...

    ich gebe ((2+2)*2) ein und es kommt 0 raus... funzt net... ist klar weil er NUR anfängt + oder so zu beachten wenn Klammern= 0 sind...

    int strich = -1;	// Strichoperator gefunden wird strich zum Wert der Stelle wo gefunden
    	int punkt = -1;		// Strichoperator gefunden wird strich zum Wert der Stelle wo gefunden
    	int klammern = 0;	// Klammer erhöhrt sich wenn Klammerauf und senkt sich wenn Klammerzu
    
    	for ( int i = 0; term[i] != '\0'; i++)
    	{
    		if ((term[i] == '+' || term[i] == '-') && klammern == 1)
    		{
    			strich = i; // Stelle an der das + oder - im string steht wird in var strich gespeichert
    			break;
    		}
    		else if ((term[i] == '/' || term[i] == '*') && klammern == 0)
    		{
    			punkt = i;  // Stelle an der das * oder / im string steht wird in var punkt gespeichert
    		}
    		else if (term[i] == '(')
    		{
    			klammern++; //Wenn Klammerauf gefunden klammern++
    		}
    		else if (term[i] == ')')
    		{
    			klammern--; //Wenn Klamerzu gefunden klammern--
    		}
    


  • Wenn es dir um die Klammern geht, solltest du im String die letzte öffende Klammer suchen. Von da an suchst du dann die erste schließende. Dann hast du schon einmal den "innersten Term". Den löst du auf und rechnest dann genauso weiter.



  • Fellhuhn schrieb:

    Wenn es dir um die Klammern geht, solltest du im String die letzte öffende Klammer suchen. Von da an suchst du dann die erste schließende. Dann hast du schon einmal den "innersten Term". Den löst du auf und rechnest dann genauso weiter.

    irgendwie so muss ich das wohl mal angehen...

    *stark nachdenk* XD



  • Ich brauch glaube ich einen Idee anstoß

    wär nett 🙂

    Danke



  • Nicht schön, nicht perfekt, aber funzt (bei richtigen Eingaben):

    Verwendet allerdings C++-Strings und StringStreams zwecks Konvertierung. Damit du aber noch was zu tun hast erklär ich nichts und hast was zu knobeln. 🙂

    #include <string>
    #include <iostream>
    #include <algorithm>
    #include <sstream>
    
    using namespace std;
    
    double calc(string t){
        int p = t.find_first_of("+-/*", 1);
    
        stringstream ss1(t);
        double v1;
        ss1 >> v1;
    
        stringstream ss2(string(t.c_str() + p + 1));
        double v2;
        ss2 >> v2;
    
        switch(t[p]){
    	case '+': return v1+v2;
    	case '-': return v1-v2;
    	case '*': return v1*v2;
    	case '/': return v1/v2;
        }
        cerr << "Verstehe das nicht: '" << t << "'!" << endl;
        return 0;
    }
    
    int main(){
        string term;
    
        cout << "Term eingeben?" << endl;
        cin >> term;
    
        int i, j;
        do{
    	i = term.find_last_of('(');
    	if (i != string::npos)
    	{
    	    j = term.find_first_of(')', i);
    	    if (j == string::npos){ 
    		cerr << "Verstehe das nicht: " << term << endl; 
    		break; 
    	    }
    	    string part(term.begin() + i + 1, term.begin() + j);
    	    double value = calc(part);
    	    stringstream v;
    	    v << value;
    	    string rep = v.str();
    	    term.replace(term.begin()+i, term.begin()+j+1, rep);
    
    	    cout << "== " << term << endl;
    	}else break;
        }while(true);
    };
    


  • ok danke XD

    wenn ich das mal mit den Strings verstehe versteh ich den vorgang bestimmt auch 🙂

    bin das gerade an am meinem Quellcode am probieren... wenns nicht klappt mus swohl mein Ausbilder wieder herhalten 😃



  • Ein String ist auch von der Handhabe nicht großartig anders als ein C-Array, bietet nur einfach ein paar sinnvolle Funktionen wie find() usw. Aber die kannst du auch mit Char-Arrays leicht nachbilden.

    Das Prinzip ist einfach:
    1. Finde eine Klammer ohne weitere Verschachtelung
    2. Seperiere dessen Term und rechne den aus
    3. Ersetze den Teil an dem vorher der Term + Klammern stand durch das Resultat
    4. gehe zu 1

    Punkt 3 dürfte etwas triggy sein, dafür solltest du jedesmal ein neues char-Array anlegen, sonst kann es bei größeren Berechnungen vorkommen das der alte Platz für das Resultat nicht reicht (oder? *grübel* naja, sicher beim Teilen).



  • hehe ja ich mch erstmal in meine Funktion Berechne zu beginn eine überprüfung ob Klammern drum rum sind... dann den Term direkt wieder benutzen und hoffentlich gehts...

    aber gleich erstmal Faierabend 😃 hoffentlich... XD

    bis moin würd ich sagen 🙂



  • Virokams schrieb:

    aber gleich erstmal Faierabend 😃 hoffentlich... XD

    Na dann faier mal schön! 😉



  • sry ... für die Schreibfehler oder den einen XD

    so jetzt hab ich aber schluss ... bis moin


Anmelden zum Antworten