Zeichenkette --> Erklärung



  • Hallo,

    würde gerne wissen, wie das Programm das ich hier eingefügt habe genau funktioniert. Außerdem würde ich gerne einige Befehle näher erklärt bekommen (ruhig alle).

    So gesehen wenn einer das Programm am besten mal durch kommentieren würde, dass wäre eine große Hilfe.

    MFG Croby

    Programmcode

    char* strrchr(const char* s, int c);

    int main(void){

    char satz[100];
    char c;
    char* ergebnis;

    printf("********* Guten Tag \n");
    printf("
    Imer Fejzic *\n");
    printf("
    *********************\n");
    printf("\n");
    printf("Bitte geben Sie ein String ein !! \n");
    scanf("%s",satz);

    fflush(stdin);

    printf("Bitte geben Sie den gesuchten Buchstaben ein:\n");
    scanf("%c",&c);

    ergebnis = strrchr(satz,c);
    if (ergebnis!= NULL){
    printf("Letzte Position des gesuchten Buchstaben: %i\n",
    ergebnis-satz+1);
    }
    else{
    printf("Der gesuchte Buchstabe ist nicht vorhanden.\n");
    }

    return 0;
    }

    char* strrchr(const char* s, int c){

    const char* rueck=NULL;

    while(*s!='\0'){

    if (s == c) {
    rueck = s;
    }
    s++;
    }
    return (char
    )rueck;
    }

    ENDE!



  • Ich helf´ dir mal so, dass andere dir helfen können und keinen Augenkrebs bekommen wenn sie das lesen....

    Noch ein Tipp von mir:
    Alles erklären ist nicht lustig da man vermuten muss, dass du keine Grundlagen hast. Nimm dir Zeile für Zeile vor und erarbeite es.(wird dir glaube ich auch nicht erspart bleiben wenn du was lernen willst).

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char* strrchr(const char* s, int c); 
    
    int main(void)
    { 
    
     char satz[100]; 
     char c; 
     char* ergebnis; 
    
     printf("********* Guten Tag ***************\n"); 
     printf("* Imer Fejzic *\n"); 
     printf("***********************************\n"); 
     printf("\n"); 
     printf("Bitte geben Sie ein String ein !! \n"); 
     scanf("%s",satz);
    
     fflush(stdin); 
    
     printf("Bitte geben Sie den gesuchten Buchstaben ein:\n"); 
     scanf("%c",&c); 
    
     ergebnis = strrchr(satz,c);
    
     if (ergebnis!= NULL)
      { 
         printf("Letzte Position des gesuchten Buchstaben: %i\n", 
         ergebnis-satz+1); 
      } 
     else
      { 
         printf("Der gesuchte Buchstabe ist nicht vorhanden.\n"); 
      } 
    
     return 0; 
    } 
    
    char* strrchr(const char* s, int c)
    { 
     const char* rueck=NULL; 
    
     while(*s!='\0')
       { 
    
         if (*s == c) 
          { 
             rueck = s; 
          } 
         s++; 
       } 
     return (char*)rueck; 
    }
    


  • ich helf dir...zur selbsthilfe:

    was die keywords in C bedeuten kannst du jedem Einstiegstutorial entnehmen.

    wenn dir eine Funktion und/oder deren Funktionsweise unbekannt ist, hilft meist ein schneller Blick in google oder die Referenz deiner Wahl, z.b. MSDN, cppreference.com (knapp), cplusplus.com (mit anwendungsbeispielen), ...

    damit solltest du eigentlich durch den code schreiten können und dir selber erklärungen geben. wenn dann noch was unklar ist, kannst du ja wieder fragen.



  • char* strrchr(const char* s, int c)
    {
        for( ; *s; s++)
            if (*s == c) return *s;
    }
    /*
    (vereinfacht wiedergegeben)
    
    Das ist eine überlaufgefährdete Variante von strnchr.
    Sowas sollte man im Allgemeinen vermeiden, weil es läuft, bis ein Nullbyte
    kommt oder der Speicher aus ist. Zwar ist es eigentlich recht ungefährlich,
    weil man nicht schreibend auf den Speicher zugreift, aber es ist eine
    quasi-Endlosschleife. Wenn das dein Lehrbuch/dein Lehrer als Beispiel
    genommen hat, rate ich zum Buch/Lehrer-Wechsel .*/
    


  • Deine Variante von strrchr ist sogar noch dümmer als meine, weil deine in jedem Fall bis zum nächsten Nullbyte läuft. Da fehlt also ein break in Zeile 51.



  • überkorrekt-flamer schrieb:

    Deine Variante von strrchr ist sogar noch dümmer als meine, weil deine in jedem Fall bis zum nächsten Nullbyte läuft. Da fehlt also ein break in Zeile 51.

    wenn das mal strrchr wäre


Anmelden zum Antworten