Verarbeitung von zeichenketten in den verschiedenen programmiersprachen
Verarbeitung von Zeichenketten in den verschiedenen Programmiersprachen
Eine Zeichenkette 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.
1. Interne Speicherung der Zeichenketten
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 muß nicht angegeben werden, da sich Visual Basic immer den benötigten Speicherplatz nimmt.
In C wird eine Zeichenkette mit \0 abgeschlossen. Die Länge muß 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.
Unter MFC wurde eine eigene String-Klasse namens CString definiert, in der Strings mit variabler Länge abgespeichert werden können.
In Java sind zwei verschiedene String-Klassen vorgesehen, in denen Strings mit variabler Länge abgespeichert werden können. Die zwei Klassen sind String und StringBuffer wobei die Klasse String nach der Vereinbarung nicht mehr änderbar ist, die Klasse StringBuffer aber schon.
In COBOL ist eine Zeichenkette eine Aneinanderreihung von alphanumerischen Zeichen. Der Test wird immer linksbündig eingefügt, wobei die überstehenden Stellen abgeschnitten werden und falls der String kleiner als die vereinbarte Anzahl ist, wird der Rest mit Blanks aufgefüllt.
2.
Vereinbarung von Zeichenketten
2.1 Visual Basic:
Es gibt zwei Vereinbarungen, nämlich explizit und implizit. Bei der impliziten Vereinbarung muß die Variable vor ihrer Verwendung nicht vereinbart werden. Um sie eindeutig als String auszuweisen, muß nach dem Namen einen ‚$‘ angefügt werden (Text$ = "Franz"), 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.
Dim Text As String
Auch hier kann bei der Vereinbarung eine fixe Länge angegeben werden, wobei der Rest mit Blanks aufgefüllt wird.
Dim Text As String * 17
2.2 C:
In C muß immer eine Längenangabe angegeben werden, wobei diese um 1 zu erhöhen ist, um die abschließende ASCII 0 speichern zu können.
char Text[18];
Falls man einen konstanten String benötigt, kann man diesen als Zeiger auf eine Zeichenfolge anlegen, der Inhalt muß aber sofort initialisiert werden.
char *Text="Franz";
Bei diesem Beispiel legt der Compiler automatisch ein Zeichenarray mit 6 Zeichen
(5 Textzeichen und ASCII0) an und initialisiert es mit der angegebenen Zeichenfolge.
Der Inhalt kann nachträglich verändert werden, die Maximallänge bleibt aber erhalten, daher sollte man einen konstanten String wegen Bereichsüberschreitungen nicht mehr verändern.
2.3 MFC:
Die Vereinbarung kann prinzipell überall erfolgen. Dadurch dass der Klasse CString mehrer Konstruktoren zur verfügung stehen, können CString-Variablen vielfältig vereinbart werden.
Cstring text; Vereinbart einen leeren String
CString text="Hallo"; Vereinbart String mit dem Wert "Hallo"
CString text("x",17); Erzeugt String mit 17 "x"
CString text(&charText); Erzeugt String aus dem Null-Terminierten
Charakterstring charText.
2.
4 Java:
In Java gibt es zwei verschiedene String-Klassen: String und StringBuffer.
Vereinbarung von String:
String text="Franz" Vereinbart einen String mit Inhalt "Franz"
Vereinbarung von StringBuffer:
StringBuffer text Vereinbart leeren String mit einer Länge von 16 Zeichen.
StringBuffer text(17) Vereinbart leeren String mit einer Länge von 17 Zeichen.
StringBuffer text("Franz") Vereinbart einen String mit dem Inhalt "Franz" und mit einer Länge von 16 + die
Länge Inhalts Zeichen. In diesem Fall 16+5= 21 Zeichen.
2.
5 COBOL:
In COBOL erfolgt die Vereinbarung in der Data Division.
77 Text PIC X(17).
Der String kann auch gleich bei der Vereinbarung initialisiert werden.
77 Text PIC X(17) value "Franz".
3.Belegung von Zeichenketten
3.
1 Visual Basic:
Bei einem String ohne fixer Länge braucht sich der Programmierer nicht um die Länge kümmern, da dies Visual Basic selbst übernimmt.
Text = "Franz"
Text2 = Text
3.2 C:
In C können Zeichenketten nicht direkt in Zuweisungen verwendet werden, sonder nur mit sprintf, strcpy, und strncpy.
sprintf(Text,"%s","Franz");
sprintf(Text,"%s",Text2);
strcpy (Text,"Franz");
Bei strncpy werden nur die ersten n Zeichen kopiert, die Funktion hängt aber beim Abschluß keine ASCII 0 an, sie muß daher nach dem Befehl selbst angehängt werden.
strncpy (Text,Text2,17);
Text[17]=‘\0‘;
Der Programmierer muß selber darauf achten, das der Zielstring genügend groß ist, da sonst der dahinterliegende Speicherplatz überschrieben wird.
3.
3 MFC:
Hier kann die Belegung mittels einer direkten Zuweisung gemacht werden. Dies wird durch eine Überladung des ‚=‘ Operators erreicht.
Text="Hallo";
Text2=Text;
3.4 Java:
In Java kann die Zuweisung genauso wie unter MFC direkt gemacht werden.
Text="Franz17";
Text2=Text;
3.5 COBOL:
Hier erfolgt die Wertzuweisung mittels des Befehls move.
move "Franz" to Text.
move Text to Text2.
4.Eingabe / Ausgabe von Zeichenketten
4.1 Visual Basic:
Die Eingabe erfolgt mittels Steuerelementen (Textfeld, Listbox), während die Ausgabe zusätzlich noch mit der Methode Print erfolgen kann.
Print Text
4.
2 C:
In C erfolgt die Eingabe mittels 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 Tabulatoren speichert gets sie im String, scanf bricht beim 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 Formatierungen vorgenommen werden können.
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 Formatierungen zulassen, kann man bei printf Formatierungen angeben.
puts(Text);
scanf("%s",Text);
cout << Text;
4.3 MFC:
Die Eingabe erfolgt hier ebenfalls mittels Steuerelementen wie in Visual Basic.
4.4 Java:
Hier erfolgt die Ausgabe mittels der System – Klasse.
System.out.
println(text);
4.5 COBOL:
Die Eingabe erfolgt mittels:
ACCEPT Text FROM TERMINAL.
Die Ausgabe erfolgt durch:
DISPLAY Text UPON TERMINAL.
5.Vergleichen von Zeichenketten
5.1 Visual Basic:
In Visual Basic ist wie in Turbo Pascal ein direkter Vergleich möglich, die zugelassenen Operatoren sind <,<=,=,>=,> und <>.
5.2 C:
In C ist kein direkter Vergleich möglich, daher muß man eine der Funktionen strcmp, stricmp oder strncmp nehmen. Bei einem Vergleich werden wie in Turbo Pascal die ASCII-Codes der einzelnen Zeichen verglichen.
strcmp liefert 0 zurück falls die beiden Strings gleich sind, einen Wert kleiner 0 falls der erste Parameter kleiner ist als der zweite und einen Wert größer 0 falls der erste Parameter größer ist.
strcmp("Franz","franz"); à Ergebnis: -1
stricmp vergleicht zwei Strings miteinander, wobei es die Groß- und Kleinschreibung ignoriert. Der Rückgabewert ist gleich wie bei strcmp.
stricmp("Franz","franz"); à Ergebnis: 0
strncmp vergleicht zwei Strings miteinander, wobei nur die ersten n Zeichen verglichen werden. Der Rückgabewert ist gleich wie bei strcmp.
strncmp("Franz","Franzi",4); à Ergebnis: 0
5.3 MFC:
Unter MFC können Strings mit der CString – Klasse direkt verglichen werden.
CStringText==CstringText
CStringText==charText
CStringText>charText
CStringText>CstringText
Wobei auch mit den Memberfunktionen Compare und CompareNoCase verglichen werden kann. Compare vergleicht Case-sensitiv, CompareNoCase vergleicht nicht Case-sensitiv.
If (Text.Compare("Hallo"))
If (Text.CompareNoCase("hallo"))
5.4 Java:
Unter Java können String direkt verglichen werden.
If (Text1=Text2)..
.
5.5 COBOL:
In COBOL ist ebenso ein direkter Vergleich möglich, wobei COBOL 74 die Vergleichswörter not, greater (>), less (<) und equal (=) verwendet. In COBOL 85 kommen noch die Vergleichswörter greater or equal (>=) und less or equal (<=) dazu.
6.Ermitteln der aktuellen Stringlänge
6.
1 Visual Basic:
Laenge = Len(Text)
6.2 C:
Laenge = strlen(Text);
6.3 MFC:
Laenge = text.GetLength();
6.4 Java:
Laenge = text.length();
Kap=text.
capacity(); Liefert die Kapazität des Strings. Nur bei
StringBuffer.
6.5 COBOL:
In COBOL kann man die Länge eines Strings nicht ermitteln. Er ist immer solange, wie man ihn vereinbart hat, da freier Platz mit Blank aufgefüllt wird.
7.
Bearbeiten von Zeichenketten
7.1 Zeichenweiser Zugriff:
Visual Basic:
In Visual Basic kann man jedes Zeichen mit der Funktion Mid ansprechen
zeichen = Mid(Text,pos,1)
Mid(Text,pos,1) = ‘a‘
Der letzte Parameter gibt die Anzahl der Zeichen an.
C:
In C kann man die einzelnen Zeichen über den Index von 0 bis Länge des Strings –1 ansprechen.
Text[17] = ‘a‘; }
zeichen = Text[17]; } à Das 18. Zeichen wird bearbeitet.
MFC:
In MFC kann auf ein String-Objekt genauso wie unter C zugegriffen werden
Text[17] = ‘a‘; }
zeichen = Text[17]; } à Das 18.
Zeichen wird bearbeitet.
Java:
In Java muß man sich mit der Memberfunktion CharAt und SetCharAt behelfen.
Text.SetCharAt(17,"a"); } à Das 17. Zeichen wird
zeichen = Text.CharAt(17); } bearbeitet.
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 17 TIMES.
7.2 Teilstring suchen:
Im String Text wird nach Suchstring gesucht!
Visual Basic:
In Visual Basic gibt es die Funktion Instr, welche die Position des ersten Zeichens des Suchkriteriums innerhalb von Text zurückliefert, 0 bedeutet nichts gefunden.
Position = Instr(Suchstring,Text);
C:
In C steht meistens die Funktion strstr zur Verfügung, die einen Zeicher auf den gefundenen Suchstring in Text oder NULL bei nicht gefunden zurückliefert.
Zeiger = strstr(Text,Suchstring);
MFC:
Unter MFC steht die Member-Funktion Find zur Verfügung.
Position=Text.Find("Hallo");
Java:
In Java wird die Member-Funktion IndexOf() zur Verfügung gestellt.
Position=Text.IndexOf("Hallo");
COBOL:
COBOL stellt keine eigene Suchfunktion zur Verfügung.
7.
3 Teilstring herauskopieren:
Visual Basic:
In Visual Basic gibt es Left$, Right$ und Mid$, wobei Left$ die ersten n Zeichen, Right$ die letzten n Zeichen, und Mid$ n Zeichen ab der Position von String liefert. Die Zählung beginnt bei 1.
Text = "Franz"
Ziel = Mid$(Text,2,3) à Ziel = "ran"
C:
Hier gibt es die Funktion strncpy, die einen Positionszeiger, nämlich Text übergeben bekommt und von dieser Position an n Zeichen kopiert. Der Nachteil dieser Stringfunktion ist, dass sie keine abschließende ASCII 0 anhängt und daher der Programmierer sich selbst darum kümmern muß.
strcpy(Text,"Franz");
strncpy(Ziel,Text+1,3); à Ziel = "ran"
Ziel[3] = 0;
MFC:
Hier gibt es die selben Funktionen wie unter Visual Basic, nur das sie hier eine Memberfunktion von CSring sind: Mid(),Left(),Right()
Text="Franz";
NeuText=Text.Mid(1,3); à NeuText="ran";
COBOL:
In COBOL gibt es keine Funktion, die einen Teilstring herauskopiert.
Hier muß der Programmierer selbst Hand anlegen.
7.4 Teilstring einfügen:
Bsp.:
Text1: Hello world
Text2: Franz and hello
Ergebnis: Hello Franz and hello world
Diese Funktion wird unter keiner Programmiersprache zur Verfügung gestellt und muß umständlich ausprogrammiert werden.
7.5 Teilstring löschen:
Text: Hello Miss America!
Ergebnis: Hello America!
Visual Basic:
In Visual Basic gibt es dafür keine vorgefertigte Funktion.
C:
strcpy(Text+6,Text+11);
In C wird einfach der hintere Teil des Strings an die neue Stelle kopiert. Dadurch wird der Teilstring überschrieben.
MFC und Java:
Hier gibt es keine eigene Funktion und es muß ähnlich wie unter C ausprogrammiert werden.
COBOL:
In COBOL gibt es für dieses Problem keine vorgefertigte Funktion.
7.6 Teilstring ersetzen:
Visual Basic:
Teilstring ersetzen kann man in Visual Basic einfach mit der Funktion Mid, wobei der letzte Parameter die Anzahl der einzufügenden Zeichen angibt
Text = "Franz war hier"
Mid(Text,7,3) = " 17" à Ergebnis: "Franz 17 hier"
C:
In C kann man dazu die Funktion strncpy verwenden.
Hier ist von Vorteil, dass strncpy keine abschließende ASCII 0 schreibt.
strcpy(Text,"Franz war hier");
strncpy(Text+6," 17"); à Ergebnis: "Franz 17 hier"
MFC und Java:
Hier gibt es keine eigene Funktion und es muß ähnlich wie unter C ausprogrammiert werden.
COBOL
In COBOL kann man sich nur helfen, wenn man den String als Tabelle vereinbart hat, denn nur so kann man auf einzelne Zeichen zugreifen. Den Algorithmus muß man allerdings selbst entwickeln, da entsprechende Zugriffsfunktionen fehlen.
7.7 Teilstring anhängen
Visual Basic:
Ergebnis = Text1 + Text2 oder
Ergebnis = Text1 & Text2
C:
In C gibt es dafür die Funktion strcat, die einen String an einen anderen anhängt und mit ASCII 0 abschließt.
strcpy (Ergebnis,Text1);
strcat (Ergebnis,Text2);
MFC:
Text="Hallo"+Text;
Java:
Text="Franz"+Text;
COBOL:
STRING Text1 Text2 DELIMITED BY SIZE INTO Ergebnis.
Anmerkungen an Markus Trettler
made by Markus Trettler March 1999
last updated: June 1999
Anmerkungen: |
| impressum | datenschutz
© Copyright Artikelpedia.com