Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
12.3 Weitere Str<strong>in</strong>gfunktionen<br />
Str<strong>in</strong>gs können nicht direkt mite<strong>in</strong>ander verglichen werden, mit e<strong>in</strong>em direkten == wie hier<br />
char Text1[] = "Hans";<br />
char Text2[] = "Fritz";<br />
if (Text1 == Text2) {} /* Vergleicht Adressen, nicht Inhalte !! */<br />
werden nur <strong>die</strong> Speicheradressen der Str<strong>in</strong>gs, nicht aber deren Inhalt verglichen. Um Str<strong>in</strong>gs zu vergleichen<br />
muss z.B. <strong>die</strong> Funktion strcmp() verwendet werden, oder der Str<strong>in</strong>g von Hand Zeichen<br />
für Zeichen verglichen werden. Wenn der Vergleich auf Grösser oder Kle<strong>in</strong>er lexikalisch korrekt<br />
se<strong>in</strong> soll (mit Umlauten) kann strcmp nicht verwendet werden. strcmp vergleicht nur nach<br />
ASCII-Code. strcmp() liefert 0 zurück, wenn beide Str<strong>in</strong>gs gleich s<strong>in</strong>d, e<strong>in</strong>en Wert kle<strong>in</strong>er 0<br />
wenn der erste kle<strong>in</strong>er ist <strong>und</strong> sonst e<strong>in</strong>en Wert grösser 0.<br />
Um <strong>die</strong> Str<strong>in</strong>gfunktionen verwenden zu können muss <strong>die</strong> Datei str<strong>in</strong>g.h e<strong>in</strong>geb<strong>und</strong>en werden<br />
(#<strong>in</strong>clude ), sie enthält unter anderem folgende Str<strong>in</strong>gfunktionen:<br />
char s1[20] = "Hans";<br />
char s2[20] = "Fritz";<br />
strlen(s1) liefert <strong>die</strong> Länge e<strong>in</strong>es Str<strong>in</strong>gs zurück (Ohne der abschliessenden 0).<br />
Achtung, bestimmt nicht den effektiv vorhandenen Platz, sondern nur<br />
<strong>die</strong> Länge des Textes, also hier 4 (Den belegten Platz).<br />
strcpy(s1, s2) kopiert den Str<strong>in</strong>g s2 nach s1 (Inklusive der abschliessenden 0).<br />
strcat(s1, s2) hängt den Str<strong>in</strong>g s2 an Str<strong>in</strong>g s1 an.<br />
strcmp(s1, s2) vergleicht zwei Str<strong>in</strong>gs mite<strong>in</strong>ander<br />
(Achtung: '0' < '9' < 'A' < 'Z' < 'a' < 'z').<br />
Bei den kopierenden Funktionen (strcpy, strcat) f<strong>in</strong>det ke<strong>in</strong>e Prüfung auf ausreichend Platz<br />
im Ziel statt, es wird e<strong>in</strong>fach geschrieben. Der Programmierer muss selbst für ausreichend Platz (=<br />
Genügend grosses Array) im Ziel sorgen, sonst ist das Verhalten des Programms unvorhersehbar<br />
(Es kann funktionieren, gelegentliche Fehlfunktionen aufweisen, h<strong>in</strong> <strong>und</strong> wieder Abstürzen oder<br />
auch immer Abstürzen)<br />
char Text1[100] = "Welt";<br />
char Text2[100];<br />
strcpy(Text2, Text1); /* Kopiert Text1 nach Text2 */<br />
strcpy(Text1, "Hallo"); /* Kopiert "Hallo" nach Text1 */<br />
strcat(Text1, " "); /* Haengt e<strong>in</strong> Leerzeichen an Text1 an */<br />
strcat(Text1, Text2); /* Haengt Text2 an Text1 an */<br />
/* Vergleicht Text1 mit "Hallo Welt" */<br />
if (strcmp(Text1, "Hallo Welt") == 0) {<br />
pr<strong>in</strong>tf("Alles OK, Laenge von \'%s\' ist %d\n", Text1, strlen(Text1);<br />
} else {<br />
pr<strong>in</strong>tf("Error");<br />
}<br />
Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 49/147