Strings (auf Deutsch: \"Zeichenketten\") sind eigentlich eindimensionale char-Arrays (also Felder, bei denen jeder Teil einen Character-Wert enthält) abgeschlossen mit einem \'\\0\'-Byte.
Das \'\\0\'-Byte ist dazu da, um das Array eindeutig als String zu charakterisieren und es somit möglich macht, die zahlreichen String-Funktionen (wie z.B. \"puts\", \"strcpy\", ...) zu nutzen.
Die String-Einlesefunktionen wie z.B. \"gets\" fügen automatisch das \'\\0\'-Byte hinzu
Das Umwandlungszeichen für die \"printf\"- bzw. \"scanf\"- Funktionen (sowie deren Abwandlungen) ist das \"%s\" (\"s\" für String).
Beispiele:
Ein Beispiel für ein normales char-Array:
char a[3]={\'A\',\'B\',\'C\'}; kein \'\\0\' KEINE Stringfunktionen nutzbar
Ein Beispiel für einen String:
char a[4]={ \'A\',\'B\',\'C\',\'\\0\'}; \'\\0\' sorgt dafür, dass Array als String anerkannt wird!
Andere (gleichwertige) Schreibweise:
char a[4]=\"ABC\"; ACHTUNG! Man braucht ein Array mit 4 Stellen (durch Anführungszeichen (\"...\"), wird Array automatisch zu String
\'\\0\' muss ins Array passen Eine Stelle dazu!
Ist in einem String das \'\\0\' an mehreren Stellen vorhanden (oder nicht am Ende), so wird bei einer Stringfunktion (wie z.B. \"puts\" oder \"strcmp\") jede Information hinter dem ersten \'\\0\' ignoriert!
Zum Beispiel:
char a[4]={ \'A\',\'B\',\'C\',\'\\0\',\'A\',\'B\',\'C\',\'\\0\'}; Ausgabe mit \"puts(a);\": ABC
\'\\0\' öfters vorhanden
char a[4]={ \'A\',\'B\',\'C\',\'\\0\',\'A\',\'B\',\'C\'}; Ausgabe mit \"puts(a);\": ABC
\'\\0\' NICHT am Ende: Alles dahinter wird ignoriert!
Stringfunktionen:
Um mit Strings effizient arbeiten zu können, gibt es in C/C++ zahlreiche Stringfunktionen.
Hier die Wichtigsten:
gets (stringname); Liest einen String ein (so viele Chars, bis \"Enter\" gedrückt wird).
puts (stringname); Gibt einen String aus.
strcmp (s1,s2); Vergleicht 2 Strings. Wenn die Strings nicht identisch sind (Rückgabewert: 0), wird die Differenz der ASCII-Werte der ersten 2 unterschiedlichen Buchstaben zurückgeliefert.
strlen (s1); Liefert die Anzahl der vorhandenen Werte in einem Array bis zum ersten \'\\0\'. Das \'\\0\'-Byte wird nicht mitgezählt!
strcpy (s1,s2); s2 kopiert den Inhalt nach s1 (s1 wird überschrieben). Um komplett zu kopieren, sollte s1 mindestens so viele Felder haben, wie der String von s2 benötigt. Ausserdem muss s2 ein String sein.
strcat (s1,s2); Der String von s2 wird an s1 \"angehängt\".
s1 muss genügend freie Felder haben
\'\\0\' von s1 wird vom ersten Char von s2 überschrieben.
Beispielprogramm:
Anm.: Alle reinen Stringfunktionen sind \"fett\" geschrieben!
Anhand dieses Beispiels kann man die meisten String-Funktionen in Aktion sehen. Es ergibt keinen wirklichen Sinn, verdeutlicht aber die Möglichkeiten von Strings und den dazugehörigen Funktionen.
#include
#include
#include
void main (void)
{
char vname[30], nname[15], eingabe[15]; // verwendete Var.
clrscr();
printf(\"Geben Sie Ihren Vornamen ein: \");
gets (eingabe); // Einlesen d. Vornamen
strcpy (vname, eingabe); // Beispiel v. \"strcpy\"
strcat (vname, \" \"); // Für Leerzeichen
// zwischen den Namen
printf(\"Ihr Nachname: \"); // Einlesen d. Nachnamen
gets (nname);
strcat (vname, nname); // Zusammensetzen d. Namen
printf(\"Ihr Name ist: \"); // Ausgabe d. gesamten N.
puts (vname);
printf(\"Er ist %d Zeichen lang.\",strlen(vname)-1);
// Ausgabe der Länge d. N.
// (\"-1\" wegen dem Leer-
// zeichen zw. d. Namen
getch();
}
|