Frage zu meinem Programm



  • int main()
    {
        char text[SIZE], *ptr1=text, zeichenfolge[SIZE], *ptr2=zeichenfolge, kopie[SIZE], *ptr3=kopie, *searchstart, zeichenfneu[SIZE], *ptr4=zeichenfneu;
        int i, anzahl=0, stellen[SIZE], *ptrstellen=stellen, stelle=0, len;
    
        printf("Bitte geben Sie einen Text ein (max. 1000 Zeichen):\n\n");    // Text einlesen
        fgets(text,1000,stdin);
        if( strchr(zeichenfolge,'\n') ) *strchr(zeichenfolge,'\n')='\0';    // Zeilenumbruch durch fgets von Zeichenfolge entfernen
    
        printf("\nNach welcher Zeichenfolge soll gesucht werden? ");        // Suchzeichenfolge einlesen
        fgets(zeichenfolge,1000,stdin);
        if( strchr(zeichenfolge,'\n') ) *strchr(zeichenfolge,'\n')='\0';    // Zeilenumbruch durch fgets von Zeichenfolge entfernen
    
        printf("\nDurch welche Zeichenfolge soll sie ersetzt werden? ");    // Ersatzzeichenfolge einlesen
        fgets(zeichenfneu,1000,stdin);
        if( strchr(zeichenfneu,'\n') ) *strchr(zeichenfneu,'\n')='\0';        // Zeilenumbruch durch fgets von Zeichenfolge entfernen
    
        while(strstr(text,zeichenfolge) )                                    // solange ab aktueller ptr1-Position in text bis zum text-Ende <zeichenfolge> gefunden wird
                                                                            // strstr() gibt die adresse des ersten Zeichens der gefundenen Zeichenfolge im Text zurück
            {
    
            // Längenvariable um verschiedene Stellen im Array anzusprechen
            len=0;
    
            // Temporäre Kopie, um Rest nach Suchzeichenfolge nicht zu verlieren
            strcpy(kopie,text);
    
            // 'strstr' liefert die Adresse des ersten Fundzeichens der Suchzeichenfolge
            searchstart=strstr(text,zeichenfolge);
    
            // Stelle, an der später die Ersatzzeichenfolge angehängt wird
            len=searchstart-text;
    
            // Text-Array vor Suchzeichenfolge abschneiden und mit Nullbyte beenden um später etwas anfügen zu können
            text[len]='\0';
    
            // An Text-Array die Ersatzzeichenfolge anhängen
            strcat(text, zeichenfneu);
    
            // Stelle nach der Ersatzzeichenfolge, an die der Rest des Textes angehängt wird
            len += strlen(zeichenfolge);
    
            // Anhängen des Rest-Textes (An Text soll die Kopie, aber erst ab Text vor Suchzeichenfolge + suchzeichenfolge angehängt werden) (beides minus Nullbyte)
            strcat(ptr1,ptr3+len);
    
            // Stelle ermitteln, an der etwas gefunden wurde + Anzahl hochzählen
            stellen[anzahl++] = searchstart-text;
            }
    
        printf("\n\n'%s' wurde %i mal durch '%s' ersetzt, an den Stellen:\n\n", zeichenfolge, anzahl,zeichenfneu);
    
        // Schleife für Stellenausgabe, da diese je nach Anzahl der Funde variiert
        for(i=0;i<anzahl;i++)
            printf("%i ",stellen[i]+1);
    
        // Ausgabe des neuen Textes
        printf("\n\nIhr Text:\n\n");
        printf("%s\n\n", text);
    }
    

    Hi, ich hab das o. g. programm geschrieben, es funktioniert auch. es soll in einem text nach einer zeichenfolge suchen und gegen eine neue ersetzen.

    Zum Verständnis möchte ich aber gern noch etwas wissen:

    1. wenn ich mit "fgets" etwas in einen array einlese, ist dann am ende ein nullbyte UND der zeilenumbruch oder nur der zeilenumbruch? EDIT: Ich seh gerad, dass ich ja sdelber das Nullbyte an die stelle des Umbruchs schreibe 😃 🤡 ich bin ein clown, sry

    2. beim 2ten "strcat" benutze ich die pointer, wenn ich allerdings die array dafür nehme stürzt er ab. liegt das daran, das kein speicher dafür vorhanden ist? und warum funktioniert das mit pointer?

    3. was ist der unterschied zwischen char * und const char *?

    danke für eure hilfe!



  • Und das läuft so? Ohne SIZE und Header?

    tommey schrieb:

    2. beim 2ten "strcat" benutze ich die pointer, wenn ich allerdings die array dafür nehme stürzt er ab. liegt das daran, das kein speicher dafür vorhanden ist? und warum funktioniert das mit pointer?

    Als Argument kannst du den Namen eines Array schreiben, oder einen Zeiger auf den Anfang, das ist unter allen Umständen das gleiche. Wenn es doch Probleme macht, dann liegt die Ursache wo anders.

    tommey schrieb:

    3. was ist der unterschied zwischen char * und const char *?

    const char * ist das gleiche wie char const * , und in dieser Form kann man es von rechts nach links lesen: Zeiger auf ein konstantes Zeichen, d.h. auf eines, das sich nicht verändern lässt.
    🙂


Anmelden zum Antworten