C-Programmierung: Aufgaben: Letzten Buchstaben in String finden

Aus Wikibooks

Aufgabenstellung[Bearbeiten]

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.
Hinweis: Die Funktion strrchr aus der Standardbibliothek übernimmt die gleiche Aufgabe.

Musterlösung[Bearbeiten]

Online-Compiler ideone

#include <stdio.h>

int position(char *zeichenkette, char zeichen); /* Prototyp der Suchfunktion */

int main(void)
{
    enum { LAENGE = 100 };
    int position_zeichen,start,c;
    char zeichen, zeichenkette[LAENGE];
    
    puts("Das ist ein Programm zum Vergleich einer Zeichenkette mit einem Zeichen");

    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]=c;
    }
    zeichenkette[start] = '\0'; /* String-Ende markieren */
	
    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);
	
    if (position_zeichen == -1)	/* ist das Zeichen nich vorhanden? */
        puts("Eingegebenes Zeichen ist nicht in der Zeichenkette enthalten!");
    else
        /* wenn ja, Ausgabe des Suchergebnisses */
        printf("Position des letzten %c ist an Stelle: %d\n", zeichen, position_zeichen+1);
	
    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 -1 */
    {	
        /* Schleife zum Durchgehen der Zeichenkette */
        for(i = 0; zeichenkette[i] != '\0'; i++) 
        {
        	/* Kontrollausgabe der Zeichen mit der zugewiesenen Positionszahl */
            printf("An Stelle %4d steht das Zeichen  = %c\n",i+1,zeichenkette[i]);
            
            /* 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 */
}