Von der DEA zum Quellcode, wie geht man am besten vor?



  • Wenn man das in Code umsetzt, dann würde es wohl eher so wie automatos Code aussehen, also in Form einer State Machine, anstatt eines Parsers der ne Schleife durchläuft.

    Richtig?



  • So, ich habe mir jetzt folgenden Code ausgedacht und das mit der DEA am Ende doch sein gelassen. Denn bei der brauche ich ja noch eine Statevariable.

    Den Code habe ich ansonsten aber noch dahingehend erweitert, daß sämtliche Tabs aus dem String entfernt werden.
    Das mit den Leerzeichen, daß nur jeweils ein Leerzeichen zwischen Wörtern bestehen bleibt, bleibt gleich.

    Hier der Code:

    /* Entfernt nachfolgende Leerzeichen und Tabs von einem String */
    void strip(char s[], int len)
    {
        char ziel[len];
    	int i, z=0;
    	for (i=0; i < len-1; i++)
    	{
    		if (s[i] == '\t') /* Tabs sollen nicht nach ziel[] kopiert werden */
    		{
    			do
    			{
    				i++;
    			} while (s[i] == '\t');
    		}
    		if (s[i] == ' ' )
    		{
    			ziel[z] = s[i]; // Es soll nur ein einziges Leerzeichen zwischen zwei Wörtern gesichert werden.
    			z++;
    			do
    			{
    				/* In dieser Schleife bleiben wir solange,
    				 * solange das Zeichen ein Tab oder Leerzeichen ist.
    				 * Diese beiden Zeichen werden nicht nach ziel[] kopiert. */
    				i++;
    			} while ((s[i] == ' ') || (s[i] == '\t'));
    		}
    		ziel[z] = s[i];
    		z++;
    	}
    	ziel[z] = '\0'; /* Rest von String ziel wird abgeschnitten */
    	strcpy(s, ziel); /* Nur String s ist in der aufrufenden Funktion sichtbar,
                            daher sichern wir das Ergebnis wieder in s. */
    }
    

    Ich weiß, der Code ist nicht der eleganste, aber er funktioniert und ich habe in selbst geschrieben.
    Ansonsten gefällt mir noch der Code von "ich nix DEA" sehr, ich wollte aber etwas eigenes haben. Das anpassen an die Regel mit den Tabs wäre aber auch nicht mehr so schwierig.

    Zum Schluß habe ich noch eine Frage.
    Gibt es ein Programm, daß die Anzahl der Vergleiche (also IF Abfragen, While Bedingungen usw.) zählt?

    Ansonsten habe ich mir noch überlegt, die beiden IF Abfragen in der obersten Ebene der FOR Schleife zusammenzuführen und dann innerhalb der IF Abfrage das eine Leerzeichen abzufragen, aber ich denke so brauche ich eine IF Abfrage weniger, womit der Code effizienter ist als wenn ich die TABS und Leerzeichen in einer if Abfrage zusammenführe. Außerdem müßte ich dann nicht extra aufpassen, was geschehen sollte, wenn er mit einem TAB in die erste IF Abfrage einsteigt und dann gleich darauf ein leerzeichen folgt.
    Denn so etwas führt nur zu Komplikationen mit dem Leerzeichen:

    ... // ab For Schleife
    
            if (s[i] == ' ') || (s[i] == '\t'))
            {
                if (i] == ' ')
                { 
                  ziel[z] = s[i]; // Es soll nur ein einziges Leerzeichen zwischen zwei Wörtern gesichert werden.
                  z++;
                }
                do
                {
                    /* In dieser Schleife bleiben wir solange,
                     * solange das Zeichen ein Tab oder Leerzeichen ist.
                     * Diese beiden Zeichen werden nicht nach ziel[] kopiert. */
                    i++;
                } while ((s[i] == ' ') || (s[i] == '\t'));
            }
    

    Wenn er da nämlich mit einem TAB einsteigt, dann wird das Leerzeichen nicht gesichert und jedesmal in der While Schleife nach einem Leerzeichen abzufragen ist auch keine Lösung, denn dann hat man ja wieder doppelte Leerzeichen die nicht gesichert werden sollen.
    So gesehen ist obige Lösung besser, zumal sie auch funktioniert.

    BTW, ist der Code gut kommentiert oder sind die Kommentare zu lang?
    Was könnte man da besser machen? Sammle hier noch Erfahrung.



  • DEA zu C schrieb:

    Ansonsten gefällt mir noch der Code von "ich nix DEA" sehr...

    also mir auch 🤡



  • _-- schrieb:

    DEA zu C schrieb:

    Ansonsten gefällt mir noch der Code von "ich nix DEA" sehr...

    also mir auch 🤡

    Ist das dein eigener?
    Von deinem Anmeldedatum her könnte das zutreffen.



  • Einfügen schrieb:

    Ist das dein eigener?

    du solltest dir mal lieber ne mütze schlaf gönnen statt hier die anmeldedaten von iwelchen leuten zu studieren 😉


Anmelden zum Antworten