C-Programmierung: Aufgaben: Letzten Buchstaben in String finden
Aus Wikibooks
[Bearbeiten] Aufgabenstellung
Schreiben Sie eine Funktion, die feststellt, an welcher Stelle einer Zeichenkette ein Buchstabe das letzte Mal vorkommt. Als Parameter für die Funktion soll ein Zeiger auf den Anfang der Zeichenkette und das zu suchende Zeichen übergeben werden. Die Stellennummer, an der das Zeichen das letzte Mal vorkommt, ist der Rückgabewert. Ist das Zeichen nicht vorhanden oder wird ein Nullpointer an die Funktion übergeben, soll der Wert -1 geliefert werden. Testen Sie die Funktion in einem kurzen Hauptprogramm.
[Bearbeiten] Musterlösung
#include <stdio.h> #define LAENGE 1234 int position(char *zeichenkette, char zeichen); // Prototyp der Suchfunktion int main(void) { int position_zeichen,start,c; //Deklaration der Variablen char zeichen, zeichenkette[LAENGE]; printf("Das ist ein Programm zum Vergleich einer Zeichenkette mit einem Zeichen\n"); printf("Bitte Zeichenkette mit maximal %d Zeichen eingeben: ",LAENGE-1); // Einlesen einer beliebigen Zeichenkette mit Sonderzeichen for(start=0;(start<LAENGE-1) && ((c=getchar()) != EOF) &&c!='\n' ;start++) { zeichenkette[start]=(char)c; } zeichenkette[start] = '\0'; //Nullbyte an letzter Stelle hinzufügen if(start==LAENGE-1) //Wenn zu viele Zeichen sind, hier verarbeiten { while(getchar()!='\n'); // Zeichen solange einlesen bis Enter } printf("Bitte ein Zeichen eingeben:"); scanf("%c",&zeichen); //Einlesen des gesuchten Zeichens position_zeichen = position(zeichenkette,zeichen); //Übergabe des Rückgabewertes aus der Funktion 'position' if (position_zeichen == -1) //ist das Zeichen vorhanden? printf("Eingegebenes Zeichen ist nicht in der Zeichenkette enthalten!\n"); else // wenn ja, Ausgabe des Suchergebnisses printf("Position des letzten %c ist an Stelle: %i\n", zeichen, position_zeichen+1); position(NULL,zeichen); return 0; } //Funktion zum Suchen des Zeichens int position(char *zeichenkette, char zeichen) { int back = -1,i; if(zeichenkette!=NULL) //Wenn keine Zeichen vorhanden sind, Rückgabe von 0 { //Schleife zum Durchgehen der Zeichenkette for(i = 0; *(zeichenkette+i) != '\0'; i++) { printf("An Stelle %4d steht das Zeichen = %c\n",i+1,*(zeichenkette+i));//Kontrollausgabe der Zeichen mit der zugewiesenen Positionszahl // Vergleich der einzelnen Zeichen mit dem gesuchten if (*(zeichenkette+i) == zeichen) { back = i; //Position des gesuchten Zeichens speichern } } } return back; //Rückgabe der Position des gesuchten Zeichens }