Array nach Zeichenfolge durchsuchen :(



  • Hi, ich muss eine Praktikumsaufgabe lösen die wie folgt lautet.
    Es soll ein Text eingelesen werden, dann nach einer beliebigen Zeichenfolge gefragt werden. Dann wird der Text nach dieser Zeichenfolge durchsucht, die Stellen sowie die Anzahl der Funde ausgegeben werden. Ich habe das soweit hinbekommen, nur mit den Stellen an denen die Zeichenfolge im text auftaucht passt noch nicht genau:

    #include <stdio.h>
    #include <string.h>
    #define SIZE 1000
    
    int main()
    {
        char text[SIZE], *ptr1=text, zeichenfolge[SIZE], *ptr2=zeichenfolge;
        int i, j, anzahl=0, treffer, stellen[SIZE], *ptrstellen=stellen, stelle=0;
    
        printf("Bitte geben Sie einen Text ein (max. 1000 Zeichen):\n\n");            
        fgets(text,1000,stdin);                                                            //Text einlesen
        printf("\nNach welcher Zeichenfolge soll gesucht werden? ");
        fgets(zeichenfolge,1000,stdin);                                                    //Zeichenfolge einlesen
    
        for(i=0;i<(strlen(text)-1);i++)
        {
            treffer=0;
            for(j=0;j<(strlen(zeichenfolge)-1);j++)
            {
    
                if(*ptr1==zeichenfolge[j])                                                //prüfen ob Erstes Zeichen Text = erstes Zeichen Zeichenfolge, dann erhöhen etc.
                {
                    *(ptr1++);
                    treffer++;
                }
                if(treffer==((strlen(zeichenfolge))-1))
                {
    
                    stelle=(i+(strlen(zeichenfolge)-1));
                    anzahl++;                
                    *ptrstellen=stelle;
                    *(ptrstellen++);
                }
            }
            *(ptr1++);
    
        }
    
        printf("\n\nDie Zeichenfolge '%s' wurde %i mal gefunden, an den Stellen:\n\n", zeichenfolge, anzahl);
    
        for(i=0;i<anzahl;i++)
            printf("%i ",stellen[i]);
    
        printf("\n\n");
    
    }
    

    Meine Frage bezieht sich auf die Kompaktheit: Geht das auch einfacher? das sieht so komplex aus. Mit Hilfe von String-Funktionen vllt.?
    Ich muss ja zum Bsp. jedes Zeichen der Zeichf. mit dem text überprüfen.
    Über anregungen wäre ich seh dankbar. lg

    Oh ich glaub das ist hier falsch, gehört in C, sorry.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das wird so nix.
    Deine Vermutung ist richtig, es handelt sich um String-Funktionalitäten also benutzt man String-Funktionen vorzugsweise aus dem Standard und erst wenn dort nichts zu finden ist schreibt man sich eigene.
    Schaue dir mal die Funktion <strstr> an.

    Eine Lösung könnte z.B. lauten:

    ...
    fgets(zeichenfolge,1000,stdin); /*Zeichenfolge einlesen*/
    /* Entfernen des abschließenden '\n' da du mit fgets einliest und dort meist ein '\n' angehängt wird. */
    if( strchr(zeichenfolge,'\n') ) *strchr(zeichenfolge,'\n')=0;
    
    while( ptr1=strstr(ptr1,zeichenfolge) ) /* solange ab aktueller ptr1-Position in text bis zum text-Ende <zeichenfolge> gefunden wird */
    {
      stellen[anzahl++] = ptr1-text; /*ptr1 ist hier Position ab text-Beginn, d.h. die Differenz vom Beginn ist die fragliche Stelle*/
      ptr1 += strlen(zeichenfolge); /* für die nächste Suche die Suchstartposition nach dem gefundenen String setzen*/
    }
    
    printf("\n\nDie Zeichenfolge '%s' wurde %i mal gefunden, an den Stellen:\n\n", zeichenfolge, anzahl);
    ...
    

    Und teile mir mal mit, welche Note ich bekommen habe 😉



  • danke für deine hilfe. also ich hab erst das gepostete hier gemacht und mir dann gedacht"man das muss doch mit string funktionen einfacher gehen" und hab dann auch strstr gefunden und strncmp aber es bei mir nie hingehauen. danke noch mal, probier es gleich mal aus.

    PS: Leider ist das nur ein Praktikum was ich bestehen muss 🙂 es gibt nur lob von mir 😃


Anmelden zum Antworten