Thread Merkwürdiges Verhalten von "split()"
(20 answers)
Opened by hlubenow at 2017-07-29 19:59 2017-07-31T11:20:33 Raubtier Aber wenn ich nicht nur "next", sondern "next" und "previous" haben will, muß ich die doch auch irgendwie bei einer leeren Liste verketten. Raubtier Ja, das ist natürlich Eigengebräu. Irgendwie finde ich "string" aber viel aussagekräftiger als "char *", denn letzteres kann ja auch ein Zeiger auf char, also ein Zeiger auf einen einzelnen char sein. Bei "string" weiß man gleich, was gemeint ist. Wenn man sich daran gewöhnt hat. Und "stringpointer" ist dann eben ein Zeiger, der irgendwo im String herumspringt, und für den auch nicht extra Speicher angefordert wurde. Während "string" immer auf den Anfang zeigt, so daß man ihn an Stringfunktionen übergeben kann oder den String zurückgeben kann. Raubtier betterworld Genau, das ist der Plan. Sollte natürlich irgendwie einheitlich sein. Raubtier Ach, getNodeDataAsString() ist sowieso nicht optimal. Ich wollte halt gern, daß man verschiedene Datentypen in der Liste speichern kann. Nicht so leicht umzusetzen, wie ich dachte. Raubtier Ja. Normalerweise will man danach ja eben die Liste haben und nicht mehr den String. Raubtier Denselben Vorteil wie Perl: Sie sind für den Programmierer leichter zu benutzen als die Rückgabe von strtok(). Genaugenommen sehe ich in leicht zu benutzenden, dynamischen Listen, gemischt für alle Datentypen, sogar den größten Vorteil von Perl. Auf Hashes kann ich verzichten, aber auf Listen nicht. Deshalb: Wenn ich die auch in C hätte, könnte ich mich mit C vielleicht besser anfreunden. Raubtier Richtig, natürlich habe ich auch noch "unshift()", aber wenn man ehrlich ist, will man meistens "push()". Wegen der Geschwindigkeit hab' ich noch eine Idee: Ich könnte noch zwei Zeiger in die List-struct aufnehmen: "to_border_first" und "to_border_last". Dann kann man von jedem Knoten aus unmittelbar auf die Sentinels springen. Dann wäre push() schneller. Manchmal, etwa für die Länge der Liste oder die Größe aller Strings in der Liste (z.B. für join()) muß man die Liste aber trotzdem ganz durchlaufen. Da kommt man manchmal schlecht drumrum, auch wenn's ärgerlich ist. Leider macht es auch nicht viel Sinn, den Index des Knotens in diesem zu speichern. Denn wenn man einen neuen in der Mitte einfügt, müßte man alle nachfolgenden neu durchnummerieren. In den Sentinels hätte ich noch Platz für zwei int. Darin könnte ich vielleicht die Länge der Liste speichern. Hmmm, mit einem String könnte ich auch noch mehr Informationen speichern. Edit: Ja, das wäre cool: Eine CSV-Zeile als String in "border_first", und dann eine Funktion "listStat()". Liste in einer Liste hab' ich mich noch nicht 'rangetraut. Später vielleicht. Ab Version 5. ;) Raubtier Hatte ich ehrlich gesagt gar nicht groß drüber nachgedacht. Raubtier Edit: Stimmt, wenn eine Funktion die Liste anlegt, muß ich in "main()" nicht nochmal "initList()" aufrufen. Ist so ein Reflex: Neue Liste -> "initList()". Gut, muß ich vorsichtiger mit sein. Raubtier C ist eben schwer. Willst Du mich jetzt entmutigen und sagen, ich soll auf der Skriptsprachenebene bleiben? Ich war eigentlich ganz zuversichtlich, weil ich schon weiter vorgedrungen war als beim letzten Versuch. Vielleicht hast Du bei Dir ja auch eine fertige Library für sowas rumliegen? Last edited: 2017-07-31 18:47:13 +0200 (CEST) |