Strings sind Zeichenketten, Es gibt verschiedene Implementierungen für Zeichenketten:
Klassisch: C | Moderner: C++ | Kompatibel: mit Delphi / Pascal | |
---|---|---|---|
char-Array | string-Klasse | AnsiString-Klasse entspricht String-Datentyp aus Delphi |
SmallString<n> entspricht String[n] aus Delphi |
char s[] = "Hugo" | string s = "Hugo" | String s = "Hugo" | SmallString<40> s = "Hugo" |
Strings beginnen mit dem Index 0 | Strings beginnen mit dem Index 1 wie bei Pascal üblich |
Wir werden später die AnsiStrings kennenlernen, diese werden bei der VCL (graphische Oberflächen) verwendet.
Hier soll auf die Verarbeitung mit der "string-Klasse" eingegangen werden, um die Grundprinzipien zu verdeutlichen.
Verarbeitung mit der string-Klasse
Anlegen eines "string-Objekts"
string s; // Definition eines string-Objektzeigers
s = "Hugo"; // Zuweisung eines string-Objekts an s
s zeigt nun auf ein string-Objekt mit dem Inhalt "Hugo", d.h. in s steht die Speicheradresse des Objekts.
s -> |
|
Das '\0' Zeichen am Ende des Strings dient als Ende-Markierung (Erbe aus C). |
---|
Verbinden von Strings (Addition)
Der Additions-Operaror '+' bewirkt bei Strings ein Aneinanderhängen:
s = "Hugo";
s = s + " lacht"; // hinten erweitern
cout << s; // Ausgabe: Hugo lacht
s = "Der " + s; // vorne erweitern
cout << s; // Ausgabe: Der Hugo lacht
Entwickeln Sie ein Programm, das nach Eingabe zweier Strings s1,s2, diese mit '_' verbunden wieder ausgibt, Beispiel:
Eingabe |
cin >> s1;
|
Hallo |
---|---|---|
Eingabe |
cin >> s2;
|
Hugo |
Ausgabe |
cout << s;
|
"Hallo_Hugo" |
Länge des Strings bestimmen
cout << s.length(); // gibt die Länge zurück
Erweitern Sie Ihr Programm um die Ausgabe der String-Länge, Beispiel:
Ausgabe | "Hallo_Hugo, Laenge 10" | Achtung: string + int führt zu Fehlermeldung! |
---|
Zugriff auf einzelne Zeichen
Auf die einzelnen Zeichen (char von character = Schriftzeichen) kann wie bei einem Array zugegriffen werden, das erste Zeichen hat den Index 0:
s = "Hugo";
cout << s[0]; // gibt 'H' aus
s[0] = 'L'; // das erste Zeichen durch ein 'L' ersetzen
cout << s; // gibt "Lugo" aus
Unterschied zwischen " und ' : "H" ist eine Zeichenkette mit dem Zeichen 'H', 'H' ein einzelnes Zeichen
Schreiben Sie ein Programm, das nach Eingabe eines Strings s die einzelnen Buchstaben des Strings mit Leerzeichen getrennt wieder ausgibt. Beispiel:
|
Tipp zur Ausgabe: cout << s[n] << " |
Erweitern Sie Ihr Programm um die Ausgabe der Zeichen als Integer-Wert in der nächsten Zeile. Tipp:
cout << (int) s[n] << " "; // Umwandeln in Zahl, mit Type-Cast Suchen Sie die ASCII-Tabelle in Ihrem Tabellenbuch z.B. S105 und vergleichen Sie die Ausgabe Ihres Programms mit der ASCII-Tabelle. |
|
Zerlegen in Teil-Strings
Problem: Ein eingegebener String soll in seine einzelnen Wörter zerlegt werden, als Trennzeichen dient '_'. Beispiel:
AnalyseWomit lässt sich jedes Wort in einer neuen Zeile ausgeben? |
Hinweis: Wenn als Trennzeichen das Leerzeichen (Space) verwendet wird, übernimmt cin nur die Zeichenfolge bis zum Leerzeichen.
Deshalb verwenden wir hier das '_' als Trennzeichen. Folgender "Work around" hat ein Schüler zur Umgehung des Problems gefunden:
|
String | s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] | s[9] | s[10] | s[11] | s[12] | s[13] | s[14] |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Inhalt | 'D' | 'e' | 'r' | '_' | 'H' | 'u' | 'g' | 'o' | '_' | 'l' | 'a' | 'c' | 'h' | 't' | '\0' |
Design
Aufgabe: Entwerfen Sie ein Verfahren, mit dem die Wörter untereinander ausgegeben werden können.
Programmierung / Implementierung / Test
Implementieren Sie Ihre Lösung und testen Sie sie!
Dokumentation
Aufgabe: Erstellen Sie ein Struktogramm für Ihre Lösung.
Zusatz-Aufgabe: Entwickeln Sie eine Lösung, bei der die einzelnen Wörter in separaten Strings abgespeichert werden:
Eingabe s= | "Der_Hugo_lacht" |
---|---|
s1 = | "Der" |
s2 = | "H u g o" |
s3 = | "lacht" |