Satz analyse



  • Hallo Leute!

    Zunächst mal zum Code: das Programm ließt einen Satz ein und ein Wort und sieht nach ob das Wort im Satz vorhanden ist. Wenn ja wie oft.
    Dies fuktioniert im Grunde genommen schon.
    Es ergeben sich jedoch nur noch 2 Probleme:

    1. Das programm zählt auch Treffer die nicht zusammen hängen.
    bsp.: Wort:ich Satz: der i lag c einfach h
    2. Das programm Zählt auch verkehrte Treffer.
    bsp.: Wort:ich Satz: der hci lag eindach || der h lag c einfach i

    Dies sollte jedoch nicht passieren.

    All meine Lösungsversuche die ich bis jetzt anstrebte hatten das Problem, dass ich mich in den schleifen immer selbst "egalisierte", wenn ich bedingungen stellte.
    Hat wer einen tipp wie ich das programm "festnageln" kann? 😃

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
    
    int c=0,j,i=0,find=0,found=0;
    char satz[100];
    char wort[10];
    
      printf("Bitte geben sie den Satz ein:");
      gets(satz);
      printf("Bitte geben sie das Suchwort ein:");
      gets(wort);
      find=strlen(wort);
    
      do
       {
    
         for(j=0;wort[j]!= '\0';j++)
          {
           if(wort[j]!=satz[i]) // Zähle nicht treffer
            {
              c++;
            }
    
           if(wort[j]==satz[i]) //Zähle treffer
            {       
              find--;
    
              if (find==0) //sind treffer = Wortlänge hast du das Wort
               {
                 found++;
                 find=strlen(wort);
               }
    
            }
    
          } 
    
       i++;
       }while (satz[i] != '\0');
    
      printf("\ndas Wort %s wurde %d mal im satz gefunden.\n",wort,found);
    
      system("PAUSE");
      return 0;
    }
    

    Danke!



  • 😉

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
    
    int lenw, lens;
    char satz[10000];
    char wort[1000];
    
      printf("Bitte geben sie den Satz ein:");
      gets(satz);
      printf("Bitte geben sie das Suchwort ein:");
      gets(wort);
      lens = strlen(satz);
      lenw = strlen(wort);
    
      for (char* i = satz; i <= satz+lens-lenw; i++)
    	  if (!memcmp(i, &wort, lenw))
    	  {	  i +=   lenw - 1;
    		  printf("Gefunden an Position %d \n", i-satz);
    	  }
    
    	return 0;
    }
    


  • Ich würde einfach mit strstr arbeiten. Vielleicht so:

    char *ptr = satz;
    
    while((ptr = strstr(ptr, wort)))
    {
    	count++;
    	ptr++;
    }
    

    wobei ich es jetzt nicht getestet habe.



  • ja die tipps sind schon gut von euch ..

    @feigling:
    habe vergessen noch zu erwähnen, dass ich ausser strlen keine anderen stringbefehle verwenden darf. 😞

    @hanibal:
    ohne pionter geht das warscheinlich nicht oder? 😮
    ansonsten schon das was ich suche ;-)...
    nur mit piontern bin ich noch nicht so gut und somit verstehe ich die funktion nicht zu 100%.. werds aber mal durcharbeiten damit ich mich mal raussehe :p



  • Curbuser schrieb:

    ja die tipps sind schon gut von euch ..

    @feigling:
    habe vergessen noch zu erwähnen, dass ich ausser strlen keine anderen stringbefehle verwenden darf. 😞

    @hanibal:
    ohne pionter geht das warscheinlich nicht oder? 😮
    ansonsten schon das was ich suche ;-)...
    nur mit piontern bin ich noch nicht so gut und somit verstehe ich die funktion nicht zu 100%.. werds aber mal durcharbeiten damit ich mich mal raussehe :p

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
    
    int i, lenw, lens;
    char satz[10000];
    char wort[1000];
    
      printf("Bitte geben sie den Satz ein:");
      gets(satz);
      printf("Bitte geben sie das Suchwort ein:");
      gets(wort);
      lens = strlen(satz);
      lenw = strlen(wort);
    
      for (i = 0; i <= lens-lenw; i++)
    	   if (!memcmp(satz + i, wort, lenw))               // satz und wort stehen als Bezeichner der Arrays
    	   {                                                // auch für deren Anfangsadressen und sind genaugenommen Pointer
    	   	  printf("Gefunden an Position %d \n", i);   // und das Gleiche wie &satz[0] bzw. &wort[0]
    		  i +=   lenw - 1;
    	   }
    
    	return 0;
    }
    

    😉



  • Curbuser schrieb:

    @feigling:
    habe vergessen noch zu erwähnen, dass ich ausser strlen keine anderen stringbefehle verwenden darf. 😞

    dann kopier doch einfach eine strstr-implementierung aus dem internet.
    z.b: http://fxr.watson.org/fxr/source/libsa/strstr.c?v=TRUSTEDBSD-SEDARWIN7
    🙂



  • Hmm, gibt es nicht extra strtok, um strings in ihre EInzelteile zu zerlegen?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char satz[10000];
        char wort[1000];
        char* token;
        unsigned int found_count = 0;
    
        printf("Bitte geben sie den Satz ein: ");
        fgets(satz, 9999, stdin);
        satz[strlen(satz)-1] = '\0';
        printf("Bitte geben sie das Suchwort ein: ");
        fgets(wort, 999, stdin);
        wort[strlen(wort)-1] = '\0';
    
        token = strtok(satz, " \n");
        while(token)
        {
            if(!strcmp(token, wort))
            {
                ++found_count;
            }
            token = strtok(NULL, " \n");
        }
        printf("Das Wort wurde %i mal gefunden\n", found_count);
    
        return 0;
    }
    


  • char* Find( char* src, char* s )
    {
    	char* p;
    	char* f;
    	while( *src )
    	{
    		if( *src == *s )
    		{
    			f = src;
    			p = s;
    			while( *src++ == *p++ )
    			{
    				if( !*p ) return f;
    				if( !*src ) return NULL;
    			}
    		}
    		src++;
    	}
    	return NULL;
    }
    int main()
    {
    	char* s = "Kugge mal, da ist ein Fuzzy!";
    	char* w = "Fuzzy";
    
    	printf("%s", Find( s, w ) );
    }
    

Anmelden zum Antworten