[Inhalt][0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17]

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;


 
strcat ( char *a , char *b )

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

#include <stdio.h>
#include <string.h>

void main (void)
{

char *a = "C-Kurs "; 
char *b = "von TuxFreeWare"; 

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:

Screenshot des ausgeführten Programms


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..
 

#include <stdio.h>
#include <string.h>

void main (void)
{

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

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

/* 

b wird an das Ende von a gehängt 
Jedoch nur maximal n=7 Zeichen von b
*/ 
strncat ( a, b ); 
printf("\na = %s\n",a);
}

Nachdem wir das Programm starten, erhalten wir

Screenshot des ausgeführten Programms


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

Die beiden Zeichenketten werden miteinander verglichen.Dabei werden von links beginnend alle Zeichen miteinander verglichen und bei den ersten Zeichen die ungleich sind entscheided, welches Zeichen größer ist und somit welcher Wert als Ergebnis nach m zurückgegeben wird. Im einzelnen sind das...
 

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:
 

#include <stdio.h>
#include <string.h>

void main (void)
{

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

/* 

Es werden beide Strings 
miteinander verglichen
*/ 
printf ("\na = %s",a);
printf ("\nb = %s\n\n",b);
printf ("\nstrcmp (a,b) = %d\n", strcmp (a,b) ); 
printf ("\nstrcmp (a,a) = %d\n", strcmp (a,a) ); 
printf ("\nstrcmp (b,a) = %d\n", strcmp (b,a) ); 
}

Das Ergebnis beim starten des Programms sieht wie folgt aus:

Screenshot des ausgeführten Programms

Nach der Eingangserläuterung kann man sich denken, das die Länge nichts mit dem Ergebnis zu tun hat. Um das zu überprüfen geben wir folgende Strings ein und sehen, das dem tatsächlich so ist.

Screenshot des ausgeführten Programms


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. Die Ergebnisse sind wie bei strcmp(..) .
 

#include <stdio.h>
#include <string.h>

void main (void)
{

char *a = "Bascht"; 
char *b = "Basstrompeter"; 

/* 

Es werden beide Strings 
miteinander verglichen
*/ 
printf ("\na = %s",a);
printf ("\nb = %s\n\n",b);
printf ("\nstrncmp (a,b,3) = %d\n", strncmp (a,b,3) ); 
printf ("\nstrncmp (a,a,3) = %d\n", strncmp (a,a,3) ); 
printf ("\nstrncmp (b,a,3) = %d\n", strncmp (b,a,3) ); 
}

Screenshot des ausgeführten Programms


strcpy ( char *a , char *b )

Der Inhalt von b wird nach a kopiert. Das Beispielprogramm....
 

#include <stdio.h>
#include <string.h>

void main (void)
{

char *a = "Der Super "; 
char *b = "C-Kurs";

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

/* jetzt wird b in a kopiert */
strcpy (a,b); 
printf ("%s\n",a);

}

...gibt folgendes aus

Screenshot des ausgeführten Programms



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

 

#include <stdio.h>
#include <string.h>

void main (void)
{

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

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

}

Es werden höchstens n Zeichen von b nach a kopiert.Der Rest des Strings bleibt erhalten.
 

#include <stdio.h>
#include <string.h>

void main (void)
{

char *a = "An sich sind Hunde schoene Tiere"; 
char *b = "Kurse"; 
 
/* wir kopieren 5 Buchstaben */
int n = 5; 

/* an x-te Stelle, hier x=13 */
int x = 13;

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

}

..und haben somit die 5 Buchstaben von 13.ter Stelle ab in a ersetzt durch die in b stehenden und haben folgendes Erhalten.

Screenshot des ausgeführten Programms


int n = strlen ( char *a )

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

#include <stdio.h>
#include <string.h>

void main (void)
{

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

Screenshot des ausgeführten Programms


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.
 

#include <stdio.h>
#include <string.h>

void main (void)
{

char *a ="C macht Spasz"; 

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

}

gibt folgendes aus

Screenshot des ausgeführten Programms

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
 

#include <stdio.h>
#include <string.h>

void main (void)
{

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

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

}

gibt folgendes aus

Screenshot des ausgeführten Programms

Es wird hier alles nach dem letzten 'S' ausgegeben.

[Inhalt][0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17]