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
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:
zeichen = Mid(Text,pos,1)
Mid(Text,pos,1) = 'a'
Der
letzte Parameter gibt die Anzahl der Zeichen an.
Text[17]
= 'a'; }
zeichen = Text[17]; } Das 18. Zeichen wird bearbeitet.
01 Text.
05 Element PIC X OCCURS 17 TIMES.
7.2 Teilstring suchen:
Im String Text wird nach Suchstring gesucht!
Position = Instr(Suchstring,Text);
Zeiger
= strstr(Text,Suchstring);
Position=Text.Find('Hallo');
Position=Text.IndexOf('Hallo');
7.3 Teilstring herauskopieren:
Text
= 'Franz'
Ziel = Mid$(Text,2,3) Ziel = 'ran'
strcpy(Text,'Franz');
strncpy(Ziel,Text+1,3); Ziel = 'ran'
Ziel[3] = 0;
Text='Franz';
NeuText=Text.Mid(1,3); NeuText='ran';
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!
In
C wird einfach der hintere Teil des Strings an die neue Stelle kopiert. Dadurch
wird der Teilstring überschrieben.
7.6 Teilstring ersetzen:
Text
= 'Franz war hier'
Mid(Text,7,3) = ' 17' Ergebnis: 'Franz 17 hier'
strcpy(Text,'Franz
war hier');
strncpy(Text+6,' 17'); Ergebnis: 'Franz 17 hier'
7.7 Teilstring anhängen
strcpy
(Ergebnis,Text1);
strcat (Ergebnis,Text2);
Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen