C++: Eine eigene String-Bibliothek

Split-Methoden implementieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Noch nicht von Anfang an dabei, sind die Methoden zum Zerlegen von Strings hinzugefügt worden, weil sie so nützlich sind. Dieser Film verrät mehr darüber.
06:30

Transkript

Die Methoden zum Trennen von Strings sind erst jüngst zu dieser Bibliothek hinzugekommen. Es sind praktische Hilfsmittel, um Strings aufzuteilen, und zwar in Abhängigkeit von Separatoren, die aus einem oder mehreren Zeichen bestehen. Diese Funktionalität ist in der String Bibliothek der STL nicht vorhanden. Ich habe sie in die BWString-Klasse aufgenommen, weil ich sie nützlich finde. Hier habe ich eine Arbeitskopie von hello.cpp und die Klasse BWString aus den Übungsdateien. Die Split-Funktionen der BWString-Klasse zerlegen einen String in einzelne Teile. Und wenn ich nun meinen Hello-String nehme, ich gebe ihm hier einen anderen Namen, String und ich weise ihm eine Reihe von Wörtern zu: one two three four five. Und nun will ich diesen String, basierend auf dem Leerzeichen, zerlegen. Meine Ergebnisse kommen in ein Array. Ich schreibe hier: auto result = Und wie Sie bemerkt haben, ernte ich dabei einen Fehler, weil eigentlich ein Unique Pointer zurückgegeben wird. Ich ändere das Ergebnis, also stattdessen an eine Referenz. Nun ist mein Fehler nur noch eine Warnung, dass ich eine nicht verwendete Variable habe. Nun verwende ich hier eine for-Schleife. for(size_t i = 0) weil result[i] und Inkrement i Und nun kann ich einfach die Ergebnisse anzeigen. Das ist message(result[i]) Das wird nicht akzeptiert, weil es ist ein Zeiger. Wenn ich das Projekt nun erstelle und ausführe, liefert es unsere zerlegten Strings: one two three four five. Sie werden, basierend auf diesen Trennzeichen, zerlegt. Dieser Separator kann nun ein Einzelzeichen wie dieses sein oder komplexer aussehen. Statt eines einzelnen Zeichens kann ich einen String übergeben. Beispielsweise so und es funktioniert immer noch. Hier sind meine Ergebnisse. Wenn ich will, kann ich die Ergebnisse auch auf drei getrennte Strings begrenzen. Erstellen, ausführen und der dritte Teil-String sieht nun so aus. Das Zerlegen hat bei drei aufgehört. Somit haben wir einfach den Rest des Strings bekommen. Sehen wir uns nun an wie das funktioniert. Wie Sie sich erinnern, haben wir in unserer Header-Datei den Unique Pointer für das Array und einen Shared Pointer für die einzelnen Objekte. Was zurückgegeben wird, ist dieses Array von Zeigern. Somit müssen wir mit einem Zeiger Member-Objekt dereferenzieren, statt mit dem einfachen Punkt für das Member-Objekt. Werfen wir einen Blick auf die eigentlichen Split-Methoden hier. Zuerst haben wir einige alternative Signaturen: eine mit einer Zeichenübereinstimmung und eine mit einer Zeichen-String-Übereinstimmung. Dann kommt das eigentliche Arbeitspferd, eine Funktion, die den Zeichen-String vergleicht und die maximale Anzahl von Zerlegungen übernimmt. Wenn man als maximale Zerlegungen eine -1 übergibt, trennt die Funktion einfach die maximale Anzahl, die sie finden kann. Praktisch gibt es dafür aber eine Grenze, eine Konstante MAX_SPLIT, die auf 1023 gesetzt wird, was ausreichend sein sollte. Prinzipiell verwendet die Funktion diese Wahl-Schleife und darin strstr, wieder aus der Standard String Bibliothek, um nach den Übereinstimmungen zu suchen. Und für jede Übereinstimmung erzeugt sie einen temporären Puffer. Sie kopiert diesen Teil des Strings in den temporären Puffer und fügt ihn dann an das Split-Array mit Hilfe dieser Funktion _append_split_array an, löscht dann den temporären Puffer, inkrementiert den Zeiger und fährt fort. Unsere _append_split_array-Methode hat natürlich noch einen Test auf das Ende des Strings, nachdem alle Übereinstimmungen gefunden wurden. Wenn noch irgendwelche Zeichen verblieben sind, weiß die Funktion, dass diese das letzte Element für das Array liefern. Somit ist diese _append_split_array hier in unseren privaten Methoden untergebracht. Außerdem überprüft _append_split_array, ob unser Zerlegungszähler (Split Count) zu groß ist. Wenn wir noch kein Array haben, initialisiert sie das Split Array und nimmt dann einfach den Split Count als Index und verwendet make_shared, um einen neuen Shared Pointer zu erzeugen und ihn im Array zu speichern. Und sie inkrementiert den Zähler, einfacher geht es kaum. Es gibt eine separate Methode _reset_split_array, die lediglich etwas Speicherverwaltung betreibt. Ich habe sie weiter oben beschrieben. Wenn wir einen Split Count haben, dann löschen wir ein Element nach dem anderen, solange Split Count größer 0 ist, dekrementieren dabei den Zähler und rufen Reset auf, was bei dem Aufruf auf einem Shared Pointer das Objekt zerstört, den Destruktor aufruft und den Speicherplatz zurückfordert. Und dann fordert sie das Array selbst zurück, das ein Unique Pointer ist. Außerdem gibt es eine Reihe von Conform-Methoden für die Ergebnisverarbeitung eines Split Arrays, das heißt für das Ergebnis einer String-Zerlegung. Hier unten gibt es ein Split-Item, das einfach ein individuelles Element basierend auf dem Index zurückgibt. Und wenn ich das in meiner hello.cpp hier ausprobieren will, könnte ich einfach sagen: string.split_item(i) Wenn ich das Projekt erstelle und ausführe, erhalte ich genau das gleiche Ergebnis. Das ist also lediglich eine alternative Möglichkeit auf die einzelnen Elemente zuzugreifen. Und es gibt auch split_count, bei der ich ziemlich sicher bin, dass sie im Header steht. Ja, der Code steht hier einfach deshalb, weil er diesen Zähler zurückgibt. Es steht einfach alles hier im Header. Und dieser Wert liefert einfach die Anzahl der Elemente, die zerlegt worden sind. So kann ich hier unten sagen: Split Count ist Long Double, String Split Count. Das Ergebnis von Split Count ist jetzt 3, weil wir das hier festgelegt hatten. Nehmen wir das weg und wir erhalten 5. Die Split-Funktionen sind also klein, schnell und effektiv. Ursprünglich habe ich diese Funktionen für eines der Code Cleaning Projekte geschrieben, wo ich http-Header parten musste. Seitdem habe ich sie für Zahlenrechnenzwecke verwendet und finde sie äußerst praktisch.

C++: Eine eigene String-Bibliothek

Erstellen Sie eine eigene String-Bibliothek als hundertprozentigen Ersatz für die String-Bibliothek der C++-STL.

37 min (10 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:21.10.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!