Teil 11 : Bibliotheken - Stringverarbeitung I

 
Was macht man mit eingelesenen Zeichenketten ?
Neben den einfachen Zuweisungen und Abfragen gibt es eine Reihe von komplexen Befehlen, die es einem ermöglichen mit Zeichenketten effizient zu arbeiten.

 

 
 
 
<string.h>

Bei den folgenden Befehlen muß die Headerdatei <string.h> durch ein
 

#include <string.h>
eingebunden werden!

In den Beispielen gelten folgende Variablenvereinbarungen:
 

char *a; 
char *b; 
char c; 

int n; 
int m;

Wie immer bitte daran denken, das hier nur die wichtigsten Teile der Programme abgebildet sind, die das Wesentliche darstellen!
Um vollständig laufende Programme zu erstellen sind die Beispiele zu ergänzen.
 
 
 
 
strcat ( char *a , char *b )

Es wird an a die Zeichenfolge von b angehängt.
 

char *a = "C-Kurs "; 
char *b = "bei AOL"; 

printf ("\na = %s\nb = %s\n",a,b); 

/* 

    b wird an das Ende von a gehängt
*/ 

strcat ( a, b ); 

printf("\na = %s\n",a);

Das Beispiel gibt erst die Einzelnentrings aus und danach den neuen String a.
Das fertige Programm liefert also:
 

a = C-Kurs 
b = bei AOL 

a = C-Kurs bei AOL


 
 
 
 
strncat ( char *a , char *b , int n )

Es wird wie bei strcat b an a angehängt. Jedoch nur maximal n Zeichen von b werden angehängt..
 
 

char *a = "C-Kurs "; 
char *b = "bei AOL macht Spasz"; 
int n = 7; 

printf ("\n%s\n%s\n",a,b); 

/* 

    b wird an das Ende von a gehängt 
    Jedoch nur maximal n Zeichen von b
*/ 

strncat ( a, b ); 

printf("\n%s\n",a);

Nachdem wir das Programm starten, erhalten wir
 

C-Kurs 
bei AOL macht Spasz 

C-Kurs bei AOL


 
 
 
 
int m = strcmp ( char *a , char *b )

Die beiden Zeichenketten werden miteinander verglichen.
Je nach Ergebnis werden folgende Werte als Ergebnis nach m zurückgegeben:
 
 

a < b -1 oder eine 
negative Zahl
a = b
0
a > b 1 oder eine 
positive Zahl
 

In einem Programm sieht das dann so aus:
 

char *a = "C-Kurs 1"; 
char *b = "C-Kurs 2"; 

/* 

    Es werden beide Strings 
    miteinander verglichen
*/ 

printf ("\n%d\n", strcmp (a,b) ); 

printf ("\n%d\n", strcmp (a,a) ); 

printf ("\n%d\n", strcmp (b,a) ); 

Das Ergebnis beim starten des Programms sieht wie folgt aus:
 

-1 

1


 
 
 
 
int m = strncmp ( char *a , char *b , int n )

Die Funktion ist fast die selbe wie strcmp mit dem Unterschied, das nur die ersten n Zeichen verglichen werden.
Alle nachfolgenden Zeichen werden ignoriert.
 
 
 
 
 
strcpy ( char *a , char *b )

Der Inhalt von b wird nach a kopiert.

Das Beispielprogramm....

char *a = "Der deutsche "; 
char *b = "AOL C-Kurs"; 

printf ("\n%s",a); 

strcpy (a,b); 

printf ("%s\n",a);

...gibt folgendes aus
 
Der deutsche AOL C-Kurs

 
 
 
 
strncpy ( char *a , char *b , int n )

Es werden höchstens n Zeichen von b nach a kopiert.

Das Beispielprogramm....

char *a = "Der deutsche "; 
char *b = "AOL C-Kurs"; 
int n = 3; 

printf ("\n%s",a); 

strncpy (a,b,n); 

printf ("%s\n",a);

...gibt folgendes aus
 
Der deutsche AOL

 
 
 
 
int n = strlen ( char *a )

Es wird die Länge der Zeichenkette ( ohne /0 ) nach n zurückgegeben ( s. dazu auch Teil 1 )
 

char *a ="C macht Spasz"; 
int n; 

n = strlen (a); 

printf ("\na ist %d Zeichen lang\n",n);

Als Ergebnis erhalten wir nach dem Programmstart
a ist 13 Zeichen lang

 
 
 
 
char *b = strchr ( char *a , char c )

Es wird String a nach dem Buchstaben c durchsucht und ein Zeiger auf die Stelle in a nach b zurückgegeben, an der sich der Buchstabe c zuerst befindet.
Existiert kein Buchstabe, so wird ein NULL zurückgegeben.

Folgendes Beispielprogramm
 

char *a ="C macht Spasz"; 

printf ("%s" , strchr (a , 'S') );

gibt folgendes aus
 
Spasz
Es wird also alles ab dem ersten 'S' ausgegeben.
 
 
 
 
char *b = strrchr ( char *a , char c )

Es wird String a nach dem Buchstaben c durchsucht und ein Zeiger auf die Stelle in a nach b zurückgegeben, an der sich der Buchstabe c zuletzt befindet.
Existiert kein Buchstabe, so wird ein NULL zurückgegeben.

Folgendes Beispielprogramm
 

char *a ="C macht Spasz, riesig Spasz"; 

printf ("%s" , strrchr (a , 'S') );

gibt folgendes aus
 
Spasz
Es wird hier alles nach dem letzten 'S' ausgegeben.
 
 
 
 
 
...das Obligatorische

Autor: Sebastian Cyris PCDBascht@aol.com

Dieser C-Kurs dient nur zu Lehrzwecken! Eine Vervielfältigung ist ohne vorherige Absprache mit dem Autor verboten! Die verwendete Software unterliegt der GPL und unterliegt der Software beiliegenden Bestimmungen zu deren Nutzung! Jede weitere Lizenzbestimmung die der benutzten Software beiliegt, ist zu beachten!