Bearbeitung von Strings in C 6-1
Definition des String: 6. Bearbeitung von Strings in C Zeichenstrings werden als Felder von Zeichen abgespeichert: char <Feldname> [ <Länge> ] ; Wie die Daten (Zeichenfolge) in String abspeichern: 1) Wertzuweisung in der Definition (Definition mit Initialisierung): char str[n] = "Zeichenkette"; 2) Wertzuweisung durch Einlesen: scanf("%s",str); gets (str); 3) Wertzuweisung durch einfache Zuweisungsfunktion: strcpy(s 1,s 2 ); z. B. strcpy(str,"kette"); 6-2
Funktion zur Zeichenkonversion /* Programm C6_2a.c - Variante mit Funktions-Prototyp */ #include <stdio.h> /* E/A Bibliothek */ char upper (char); /* Funktions-Prototyp */ void main (void) { /* Hauptmodul */ char satz[80], SATZ[80]; /* Definition von Variablen */ int i = 0; printf ("\n\t\t Zeichenketteumwandlung \n\n"); /* Ausgabekopf */ printf ("\n Bitte die Zeichenkette eingeben : "); gets (satz); /* Eingabe von Zeichenkette */ while (satz[i]!= '\0') SATZ[i++] = upper (satz[i]); /* Umwandlung */ printf ("\n Konvertierte Zeichenkette: %s\n\n\n", SATZ); } char upper (char c) { /* Inhalt c in Großbuchstaben umwandeln */ if (c >= 'a' && c <= 'z') return (c - 'a' + 'A'); else return (c); } 6-3
Zeichenkettenfunktionen: 6. Bearbeitung von Strings in C 1) strcpy Kopieren einer Zeichenkette: strcpy (<Zeichenkette1>, <Zeichenkette2>); strcpy(str,"zeichenkette"); 2) strcat Verknüpfen von zwei Zeichenketten: strcat (<Zeichenkette1>, <Zeichenkette2>); strcpy(str2,"-fortsetzung"); strcat(str,str2); 6-4
3) strcmp Vergleichen von zwei Strings: strcmp (<Zeichenkette1>, <Zeichenkette2>); Die Funktion strcmp vergleicht <Zeichenkette1> mit <Zeichenkette2> und liefert folgende Werte zurück: < 0 wenn <Zeichenkette1> kleiner als <Zeichenkette2> ist, = 0 wenn <Zeichenkette1> gleich <Zeichenkette2> ist, > 0 wenn <Zeichenkette1> größer als <Zeichenkette2> ist. strcmp(str,str2); strcmp(str1,"kette"); 4) strlen Länge eines String: strlen (<Zeichenkette>); StringLaenge = strlen(str); 6-5
Ausgabe einer Zeichenkette: puts (<Zeichenkette>); puts("beliebiger Text"); puts(str); Umwandlungsfunktionen: atoi (<Zeichenkette>); ASCII nach integer itoa (<integer-zahl>, <Zeichenkette>); integer nach ASCII atof (<Zeichenkette>); ASCII nach double 6-6
double atof (char s[]) { double val, power; int i, sign; for (i=0; s[i]==' ' s[i]== '\n' s[i]=='\t'; i++) ; sign = 1; /* ^ Zwischenraum uebergehen */ if (s[i]=='+' s[i]== '-') /* Vorzeichen behandeln */ sign = (s[i++] == '+')? 1 : -1; for (val = 0; s[i] >= '0' && s[i] <= '9'; i++) val = 10 * val + s[i] - '0'; if (s[i] == '.') i++; for (power = 1; s[i] >= '0' && s[i] <= '9'; i++) { val = 10 * val + s[i] - '0'; power *= 10; } return (sign * val / power); } 6-7
Zusammenfassung (Felder und Strings) Zur Deklaration von Feldern benutzt C die eckigen Klammern [ ]. In diesen Klammern wird die Anzahl der Feldelemente angegeben. Alle Felder beginnen mit dem Index 0. Ein String ist ein char-feld, das durch eine binäre Null begrenzt ist. Der Platzhalter %s dient der Funktion printf zur Ausgabe von Zeichenketten. Die Feldgrenzen werden von C nicht geprüft. Sie sind als Programmierer dafür verantwortlich, daß jedes Feld groß genug für die Aufnahme aller Elemente ist. Durch das Überschreiten der Feldgrenzen können andere Variablen zerstört werden. Funktionen strlen, strcpy, strcat und strcmp gehören zur Gruppe der Zeichenkettenfunktionen. 6-8
Die Funktion itoa wandelt eine Ganzzahl in eine Zeichenkette um. Die Funktion atoi wandelt einen String in eine Ganzzahl um. Diese Zahl kann zu einer beliebigen Basis dargestellt werden. Bei mehrdimensionalen Feldern wird die Größe jeder weiteren Dimension in separaten eckigen Klammern angegeben. 6-9