1
1. Definition
Eine Zeichenkette (String) ist eine Aufeinanderfolge von darstellbaren Zeichen, die sequentiell im Speicher angeordnet sind und gemeinsam angesprochen werden. Jedes einzelne Zeichen wird entweder durch ein Byte oder ein Wort codiert dargestellt. Strings haben immer eine aktuelle Länge, die den gerade gespeicherten Zeichen entsprechen und eine maximale Länge. Die interne Speicherung ist von Programmiersprache zu Programmiersprache verschieden.
2.
Interne Speicherung der Zeichenketten
Visual Basic
In Visual Basic wird die Länge des Strings mitgespeichert. Die maximale Länge ist auf ca. 65000 Zeichen begrenzt
(16-Bit Version). Die Maximallänge muss nicht angegeben werden, da sich Visual Basic immer den benötigten Speicherplatz nimmt.
C/C++
In C/C++ wird eine Zeichenkette mit \0 abgeschlossen. Die Länge muss bei Bedarf immer wieder neu ermittelt werden, ist jedoch "unbegrenzt".
Es gibt keinen eigenen Typ, daher werden Strings immer mittels eines Zeichenarrays (char-Array) verwirklicht.
In C++ gibt es innerhalb von Klassenbibliotheken (z.B. MFC) einen eigenen Typ für Strings, bei dem C++ den benötigten Speicherplatz an die Länge anpaßt.
JAVA
In JAVA gibt es einen eigenen Typ für Strings, bei dem JAVA den benötigten Speicherplatz an die Länge anpaßt.
Cobol
In Cobol ist eine Zeichenkette eine Aneinanderreihung von alphanumerischen Zeichen.
Der Text wird immer linksbündig eingefügt, wobei die überstehenden Stellen abgeschnitten werden. Ist der String kleiner als die vereinbarte Anzahl, wird der Rest mit Blanks aufgefüllt.
3. Vereinbarung von Zeichenketten
Visual Basic
Es gibt zwei Möglichkeiten zur Vereinbarungen, nämlich explizit und implizit. Die Variable muss vor ihrer Verwendung nicht vereinbart werden. Um sie eindeutig als String auszuweisen, muss nach dem Namen ein $ angefügt werden (Text$ = "HALLO"), sonst ist die Variable vom Datentyp Variant.
Um bei der Verwendung nicht $ schreiben zu müssen, kann man die Variable explizit vereinbaren (z.B. Dim oder Static).
Z.B.:
Dim Text As String
Auch hier kann bei der Vereinbarung eine fixe Länge angegeben werden, wobei der Rest mit Blanks aufgefüllt wird.
Z.B.:
Dim Text As String * 25 'String mit 25 Zeichen wird vereinbart
C/C++
In C/C++ muss immer eine Längenangabe angegeben werden, wobei diese um 1 zu erhöhen ist, um die abschließende \0 speichern zu können.
Z.B.:
char Text[26]; // String mit 25 Zeichen wird vereinbart (\0!!)
In C++/MFC gibt es eigens für Zeichenketten, den Typ CString.
Die Länge muss nicht angegeben werden.
CString Text;
JAVA
Es gibt jedoch eine um einiges einfachere Methode einen String anzulegen, ähnlich der in C++.
Z.B.:
String Text;Auch in JAVA kann der String gleich bei der Vereinbarung initialisiert werden.
String s2 = "Karl";
Cobol
In Cobol erfolgt die Vereinbarung in der Data Division.
Z.B.:
77 Text PIC X(25).
Der String kann auch gleich bei der Vereinbarung initialisiert werden.
77 Text PIC X(25) value "Hallo".
4.
Belegung von Zeichenketten
Visual Basic
Bei einem String ohne fixer Länge braucht sich der Programmierer nicht um die Länge kümmern, da Visual Basic die Länge des Strings automatisch anpaßt.
Bei einem String mit fixer Länge werden die Zeichen abgeschnitten, falls der String länger als vereinbart ist.
Z.B.:
Text = "Hallo"
Text = Text2
C/C++
In C/C++ können Zeichenketten nicht direkt in Zuweisungen verwendet werden, sondern nur mit sprintf, strcpy und strncpy.
Z.
B.:
sprintf(Text,"%s","Hallo"); // sprintf wird jedoch normalerweise nur zu Typenkonvertierung verwendet.
sprintf(Text,"%s",Text2);
strcpy(Text,"Hallo"); // üblichere Methode zum kopieren eines Strings
strcpy(Text,Text2); // Inhalt von Text2 nach Text
Bei strncpy werden nur ein n-Anzahl von Zeichen kopiert, die Funktion hängt zum Unterschied von strcpy nicht immer \0 an den String. Die \0 muss daher vom Programmierer selbst nach dem strncpy angehängt werden.
Z.B.
:
strncpy(Text,Text2, 3); // 3 Zeichen von Text2 werden nach Text kopiert
Text[3] = '\0'; // am Ende des Textes wird die '\0' angehängt
Der Programmierer muss selber darauf achten, dass der Zielstring genügend gross ist, da sonst der dahinterliegende Speicherplatz überschrieben wird.
In C++/MFC können Zeichenketten, die vom Typ CString sind, auch direkt in Zuweisungen verwendet werden.
Z.B.:
Text = "Hallo";
Text = Text2;
JAVA
Bei einer Zeichenkette die mit dem Befehl String definiert wurde, braucht sich der Programmierer nicht um die Länge des String zu kümmern, da die Länge des Strings automatisch angepaßt wird.
Z.
B.:
Text = "Hallo";
Text = Text2;
Cobol
Hier erfolgt die Wertzuweisung mit dem Befehl move.
Z.B.:
move "Hallo" to Text.
move Text2 to Text.
5. Ein-/Ausgabe von Zeichenketten
Visual Basic
Die Eingabe erfolgt mittels Steuerelement (Textfeld, Listbox, ...), während die Ausgabe zusätzlich noch mit der Methode print erfolgen kann.
Z.
B.:
Print Text
C/C++
In C erfolgt die Eingabe mittel gets und scanf. Bei gets wird bis zum Zeilenende gelesen, und es können keine Formatierungen vorgenommen werden, bei scanf schon. Bei einer Eingabe von Blanks und Tabulator speichert gets sie im String, scanf bricht bei dem ersten Blank oder Tabulator ab.
In C++ hat man zusätzlich noch die Funktion cin, bei der auch beim ersten Whitespace Zeichen abgebrochen wird, und keine Formatierung vorgenommen werden können.
Z.
B.:
gets (Text);
scanf ("%s",Text);
cin >> Text;
Die Ausgabe erfolgt mittels den Funktionen puts, printf und in C++ zusätzlich noch mit cout. Während die Funktionen puts und cout keine Formatierung zulassen, kann man bei printf Formatierungen angeben.
Z.B.:
puts (Text);
printf ("%-20s",Text); // Hier werden 20 Zeichen des Strings rechtsbündig ausgegeben
cout << Text;
JAVA
Die Eingabe erfolgt mittels Steuerelementen (Textfeld, Listbox, .
..) oder mittels
Z.B.:
System.in .
... // etwas kompliziert
während die Ausgabe zusätzlich noch mit der Methode drawString erfolgen kann.
Z.B.
:
System.out.println(Text);
Cobol
Die Eingabe erfolgt mittels:
ACCEPT Text FROM TERMINAL.
Die Ausgabe erfolgt mittels:
DISPLAY Text UPON TERMINAL.
6. Vergleichen von Zeichenketten
Visual Basic
In Visual Basic ist ein direkter Vergleich möglich, die zugelassenen Operatoren sind: <, <=, =, >=, >, <>
C/C++
In C ist kein direkter Vergleich möglich, daher muss man eine der Funktionen strcmp, stricmp oder strncmp nehmen.
In C wird der ASCII-Code der einzelnen Zeichen verglichen.
Strcmp liefert 0 zurück falls die beiden Strings gleich sind, einen Wert kleiner 0 falls der erste Parameter kleiner als der zweite, und einen Wert größer 0 falls der erste Parameter größer als der zweite ist.
Z.B.:
strcmp ("Haus", "haus"); // Ergebnis: -1, da der 1. Parameter kleiner als der 2.
Ist
Stricmp vergleicht zwei Strings miteinander, wobei es die Groß- und Kleinschreibung ignoriert. Der Rückgabewert ist genauso wie bei strcmp.
Z.B.:
stricmp ("Haus", "haus"); // Ergebnis: 0, da stricmp Groß- und Kleinschreibung nicht unterscheidet!
Strncmp vergleicht die ersten n-Zeichen von zwei Strings. Der Rückgabewert ist wieder gleich wie bei den beiden vorhergehenden.
Strncmp unterscheidet zwischen Groß- und Kleinschreibung!
Z.B.:
strncmp ("Jagd", "Jagdhaus", 4); // Ergebnis: 0, da ersten 4 Zeichen gleich sind.
Wird in C++ eine Variable vom Typ CString vereinbart, ist auch hier ein direkter Vergleich möglich, die zugelassenen Operatoren sind: <, <=, ==, >=, >, !=
JAVA
In JAVA ist, kein direkter Vergleich möglich, statt dessen gibt es die Methoden der String-Klasse, equals oder compareTo .
Z.B.
:
Text.equals(Text2); // liefert true wenn Text gleich Text2 ist
Text.compareTo(Text2); // funktioniert wie strcmp in C
Cobol
In Cobol ist ebenso ein direkter Vergleich möglich, wobei in Cobol 74 die Vergleichswörter: not, greater, less, equal verwendet werden.
In Cobol 85 kommen noch die Vergleichswörter: greater or equal, less or equal dazu.
7. Ermitteln der aktuellen Stringlänge
Visual Basic
In Visual Basic wird die aktuelle Stringlänge mit der Funktion Len ermittelt.
Die Funktion liefert als Return-Wert einen Integer-Wert.
Z.B.:
Laenge = Len (Text)
C/C++
In C/C++ wird die aktuelle Stringlänge mit der Funktion strlen ermittelt. Die Funktion liefert als Return-Wert einen Integer-Wert.
Z.
B.:
Laenge = strlen (Text);
JAVA
In JAVA wird die aktuelle Stringlänge mit der Methode length ermittelt. Die Funktion liefert als Return-Wert einen Integer-Wert.
Z.B.:
Laenge = Text.
length();
Cobol
In Cobol hat der String immer die vereinbarte Länge, deshalb gibt es keine Funktion die die aktuelle Länge ermittelt.
8. Bearbeiten von Zeichenketten
8.1. Zeichenweiser Zugriff
Visual Basic
In Visual Basic kann man jedes Zeichen mit der Funktion Mid ansprechen.
Zeichen = Mid (text,Position,1)
Mid (text,Position,1) = 'a'
C/C++
In C kann man die einzelnen Zeichen über den Index von 0 bis Länge des Strings - 1 ansprechen.
JAVA
In JAVA kann man die einzelnen Zeichen über den Index von 0 bis Länge des Strings ansprechen.
Cobol
In Cobol erlauben nur einige Compiler den Zugriff auf einzelne Stringkomponenten, eine andere Alternative ist daher die Vereinbarung eines Strings als Tabelle:
01 Text.
05 Element PIC X OCCURS 20 TIMES.
8.2. Teilstring suchen (Im String Text wird nach Suchstring gesucht!)
Visual Basic
In Visual Basic gibt die Funktion Instr , welche die Position des ersten Zeichens des Suchkriteriums innerhalb von Text zurückliefert.
Liefert die Funktion 0, wurde der Suchstring im Text nicht gefunden.
Position = Instr(Suchstring, Text)
C/C++
In C/C++ steht meistens die Funktion strstr zur Verfügung, die einen Zeiger auf den gefundenen Suchstring im String Text oder NULL bei nicht gefunden, zurückliefert.
Zeiger = strstr (Text,Suchstring);
JAVA
In JAVA gibt es keine Standardfunktion zum "Suchen eines Teilstrings".
Cobol
In Cobol gibt es keine Standardfunktion zum "Suchen eines Teilstrings".
8.3.
Teilstring herauskopieren
Visual Basic
In Visual Basic gibt es Left$, Right$ und Mid$, wobei Left$ liefert die ersten Zeichen des String, Right$ liefert die letzten Zeichen des Strings und Mid$ liefert die Zeichen ab der Position vom String, die Zählung beginnt bei 1. Z.B.:
Text = "12345678"
Position = 4
Ziel = Mid$ (Text,Position,4) // Ziel = 4567
C/C++
In C/C++ gibt es die Funktion strncpy, die einen Positionszeiger, nämlich Text übergeben bekommt, und von dieser Position an Anzahl Zeichen kopiert. Der Nachteil dieser Stringfunktion ist, dass sie keine anschließende '\0' anhängt, und daher muss sich der Programmierer selbst darum kümmern.
Z.
B.:
strcpy (Text, "12345678");
strncpy (Ziel, Text +3, 4); // Ziel = 4567
Ziel[4] = '\0';
JAVA
In JAVA gibt es keine Standardfunktion zum "Teilstring herauskopieren".
Cobol
In Cobol gibt es keine Standardfunktion zum "Teilstring herauskopieren".
8.4. Teilstring einfügen
Es gibt in den beschriebenen Programmiersprachen keine Standardfunktion um ein Teilstring einzufügen.
In den angegebenen Programmiersprachen muss diese Funktion vom Programmierer selbst implementiert werden.
8.5. Teilstring löschen
(Text: Hello Miss America! Ergebnis: Hello America!)
Auch hierzu muss meistens der Programmierer selbst Hand anlegen.
In C kann man mit der Funktion strcpy arbeiten um einen Teilstring zu löschen.
Z.
B.:
Strcpy (Text+6, Text +11);
8.6. Teilstring ersetzen
Hierfür gibt es in keiner der beschriebenen Programmiersprachen eine Standardfunktion.
In Visual Basic kann man mit der Funktion Mid die Zeichen im String überschreiben, aber nicht ersetzen.
In den anderen Programmiersprachen muss man diese Funktion ausprogrammieren.
8.7. Teilstring anhängen
Visual Basic
In Visual Basic steht zum zusammenhängen zweier Strings einfach das + oder & zur Verfügung.
Ergebnis = Text1 + Text2 oder
Ergebnis = Text1 & Text2
C/C++
In C/C++ steht zum zusammenhängen zweier Strings die Standardfunktion strcat zur Verfügung.
strcpy (Ergebnis,Text1); // Text1 in Ergebnisstring kopieren
strcat (Ergebnis,Text2); // Text2 an Ergebnissstring anhängen
Zwei in C++/MFC mit CString angelegte Zeichenkette, kann man auch mit + oder & zusammenhängen.
Z.
B.:
Ergebnis = Text1 + Text2; oder
Ergebnis = Text1 & Text2;
JAVA
In JAVA werden zwei Strings wie in Visual Basic mittels + und & zusammengehängt.
Cobol
In Cobol steht zum zusammenhängen zweier Strings die Standardfunktion STRING zur Verfügung.
STRING Text1 Text2 DELIMITED BY SPACE INTO Ergebnis.
Tabellarische Übersicht
Visual Basic
C/C++
JAVA
Cobol
Vereinbarung
Dim Text As String
Char Text[anz+1];
String Text;
77 Text PIC X (anz).
Zuweisung
Text$ = "Hallo"
Strcpy (Text, "Hallo");
Text = "Hallo";
MOVE "Hallo" TO text.
Vergleich
Text = "Hallo"
Strcmp(Text,"Hallo");
Text.equals("Hallo");
Text.compareTo("..");
Text = "Hallo"
Länge ermitteln
Len (Text)
Strlen (Text);
Text.Length();
Keine Standardfunktion
Teilstring suchen
Pos = Instr(Text, "al")
Zeiger = strstr(Text, "al");
Keine Standardfunktion
Keine Standardfunktion
Teilstring herauskopieren
Text2 = Left$(Text,2)
Text2 = Right$(Text,2)
Text2 = Mid$(Text,3,2)
Strncpy(Text2,Text,2);
Keine Standardfunktion
Keine Standardfunktion
Teilstring einfügen
Keine Standardfunktion
Keine Standardfunktion
Keine Standardfunktion
Keine Standardfunktion
Teilstring löschen
Keine Standardfunktion
Keine Standardfunktion
Keine Standardfunktion
Keine Standardfunktion
Teilstring anhängen
Text = Text + Text2
Text = Text & Text2
Strcat(Text,Text2);
Ergebnis=Text+Text2;
Ergebnis=Text&Text2;
STRING Text Text2 DELIMITED BY SPACE INTO Text.
Anmerkungen: |
| impressum | datenschutz
© Copyright Artikelpedia.com