Aufgabenstellung:
Wenn in einer Zeichenkette ein Zeichen unmittelbar hintereinander mehrfach
vorkommt, so sollen diese Blöcke von gleichen Zeichen auf 1 Zeichen reduziert
werden.
Die Lösung soll zwei Funktionen enthalten:
Eine Funktion suchen findet das erste Auftreten eines bestimmten Zeichens
unmittelbar nebeneinander.
Eine Funktion entfernen entfernt ab der Position pos n Zeichen aus einer
Zeichenkette.
Lösung:
/* MehrfachzeichenEntfernen.c */ #include <stdio.h> #include/* sucht, ob das Zeichen c als Mehrfachzeichen in s vorkommt */ /* *pos Rueckgabewert: Anfangsposition des Vorkommens */ /* *n Rueckgabewert: Wie oft steht das Zeichen nebeneinander */ int suchen(char *s, char c, int *pos, int *n) { int i = 0; int gefunden = 0; while (!gefunden && i < strlen(s)) { gefunden = (s[i] == c && s[i+1] == c); i++; } if (gefunden) { *pos = i; *n = 2; i = i + 2; while (s[i] == c) { (*n)++; i++; } } return gefunden; } /* Entfernt ab der Position pos n Zeichen aus der Zeichenkette s */ void entfernen (char *s, int pos, int n) { int len = strlen(s); int i; /* Alle Zeichen ab pos + n, incl. Abschlusszeichen, nach vorne kopieren */ for (i = pos+n; i <= len; i++) s[i-n] = s[i]; } int main(void) { char s[50]; char find; int p, n; int r; printf("In einer Zeichenkette werden Bloecke von " "gleichen Zeichen auf ein Zeichen reduziert!\n\n"); printf("Zeichenkette: "); gets(s); printf("Zeichen: "); scanf("%c", &find); printf("Entferne jetzt Mehrfachvorkommen des Zeichens %c\n\n", find); r = suchen(s, find, &p, &n); while (r) { /* printf("Info: %3i mal des Zeichen %c ab Index %3i gefunden\n", n, find, p); */ entfernen(s, p, n-1); puts(s); r = suchen(s, find, &p, &n); } puts(s); return 0; }