Frage zur meiner String Funktion
-
Wenn das "word" an der Stelle "length-1" gleich neue Zeile ist, dann "length--"? Verstehe ist nicht, für was das gebraucht wird bzw was das nützt.
-
ericgruen schrieb:
Solange das "word" an der Stelle von "length" nicht die binäre null hat soll er length++ machen. Ok, dann geht der eben alle Werte durch. Bei "Hallo" zb. hat er dann am ende 4, oder? 0 wird ja mitgezählt?!
Aber was ich nicht verstehe ist das dann bei if. Da geht er ja dann wieder runter, also von 4 auf die 0?! Aber was soll das '\n' bedeuten?
1. Bei word[0] findet er das 'H' von "Hallo". Deshalb wird der Schleifenkörper ausgeführt, und length wird von 0 auf 1 inkrementiert.
Bei word[1] findet er das 'a' - es wird auf 2 inkrementiert.
... und so weiter ...
Bei word[4] findet er das 'o' - es wird auf 5 inkrementiert.
Bei word[5] findet er 0, der Schleifenkörper wird nicht mehr ausgeführt, length bleibt auf 5 stehen.So weit, so gut.
2. Nun wird geprüft, ob das letzte Zeichen '\n' ist. Das ist das Zeichen für eine neue Zeile, soll in diesem Fall wohl nicht zum Wort zählen. Wenn das gefunden wird, wird von der Wortlänge eins abgezogen.
Die Funktion liefert also sowohl für "Hallo", als auch für "Hallo\n" die Länge 5.
-
Wenn ich von der while Schleife bei "length" den Wert 5 habe und dann runter zur if Schleife komme, dann komme ich ja in die Schleife garnicht rein weil "length-1 =='\n'" nicht erfüllt ist. Sehe ich das richtig? 5-1=4 und das ist bei Hallo das "l". Und kein \n für neue Zeile.
-
Nicht ganz. Die Länge von "Hallo" ist 5.
Bei word[length - 1] wird das 'o' gefunden, nicht das 'l', denn das 'H' steht auf word[0], das 'a' bei word[1] und so weiter ...
Wäre die zu prüfende Zeichenkette aber
"Hallo\n", so wäre die zunächst ermittelte Länge 6. Bei word[5] würde das '\n' gefunden, und deshalb die Länge um 1 vermindert, so dass als Ergebnis wieder die 5 geliefert werden würde.
-
Ja aber was macht das überhaupt für ein Sinn das mit \n gleich zu setzen?
-
Die Frage verstehe ich nicht ... Die Funktion prüft halt, ob der String mit einem Zeilenende aufhört, und falls ja, wird das (Zeilenende) bei der Stringlänge nicht mitgezählt, bzw. wieder abgezogen.
-
Der Hintergrund KÖNNTE folgender sein:
Wenn Du auf der Konsole eine Eingabe machst, musst Du die mit einer Zeilenschaltung (Entertaste) abschließen.
Manche Funktionen zum Einlesen von der Konsole lesen diese Zeilenschaltung mit ein, der eingelesene String endet also mit '\n'. Andere Funktionen zum Einlesen tun das aber nicht, sondern belassen das '\n' im Eingabestrom, bzw. im Tastaturpuffer.Deine Funktion ermittelt in jedem Fall die Stringlänge OHNE eine am Ende befindliche Zeilenschaltung.
-
Ach jetzt, wegen der Entertaste. Hat mich komplett raus gehauen. Ich bin einfach nicht darauf gekommen was es mit dem \n zu tun hatte. Aber jetzt weiß ich es ja zum glück, danke!
-
ericgruen schrieb:
Ja aber was macht das überhaupt für ein Sinn das mit \n gleich zu setzen?
Das ist eine besondere Anpassung an das Einlesen mit
fgets
und deiner Palindrom-Funktion.Ein Palindrom mit \n ist eher selten.
-
Noch ein kleiner Hinweis: Benutze deine Funktion "lengthOfString" nicht ohne geeignete Anpassung für Fälle, bei denen auch ein Leerstring auftreten könnte, denn dann passiert ein Zugriff mit Index = -1 und es kracht vermutlich. Ebenso darf natürlich als Parameter auch nicht NULL in deiner Funktion ankommen.