Zum Inhalt springen

Wort in String finden


error

Empfohlene Beiträge

  • 5 Jahre später...

Hi Leute,

ich habe das gleiche Problem wie error.Ich will aber keine Funktion für das finden verwenden, sondern es einfach mit eine schleife und einen zweiten Array lösen.

Hab folgenden Ansatz:

[

#include <stdio.h>

#include <stdlib.h>

#define ZEICHEN 60 /* Anzahl zugelassene Zeichen */

#define ZEICHEN2 60 /* Anzahl zugelassene Zeichen im 2.Array */

main()

{

char text1[ZEICHEN];

char text2[ZEICHEN2];

int i=0;

int j = 0;

char c;

/* Eingabe */

printf("\nGeben Sie eine Zeichenkette ein:");

c = getchar();

while(c != '\n'){

text1=c;

i++;

c = getchar();

}

text1 = '\0';

//printf("%s",text);

for(i=0;i < 60;i++)

{

if(text1 == 'p'){text2[j]= 'p';}

if(text1[i+1] == 'o'){text2[j+1]= 'o';}

if(text1[i+2] == 'k'){text2[j+2]= 'k';}

if(text1[i+3] == 'e'){text2[j+3]= 'e';}

if(text1[i+4] == 'r'){text2[j+4]= 'r';}

}

text2[j+5] = '\0';

printf("%s\n",text2);

system("pause");

} ]

das Problem hierbei, ich bekomme das Wort poker in jedenfall in den zweiten Array reingeschrieben, also wenn einfach nur diese 5 Buchstaben im text vorkommen, egal als wort oder nicht!

Was muss ich anders machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist eine Frage.Denn ich weiss, dass ich die If Abfragen anders machen soll,weiss nur nicht genau wie??

Ein zweite Array um zu sehen, dass das Wort erkannt wurde.Ich könnte den auch weglassen.

Und kein strstr, weil ich die Aufgabe ohne eine Funktion lösen möchte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

das ganze konzept wirkt schwachsinning, aber ich helf dir trotzdem mal.

die for-schleife sollte so aussehen:

for(i=0;i < 55;i++)

{

if(text1[i] == 'p' && text1[i+1] == 'o' && text1[i+2] == 'k'

&& text1[i+3] == 'e' && text1[i+4] == 'r')

{

text2[j]= 'p';

text2[j+1]= 'o';

text2[j+2]= 'k';

text2[j+3]= 'e';

text2[j+4]= 'r';

} 


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich will aber keine Funktion für das finden verwenden, sondern es einfach mit eine schleife und einen zweiten Array lösen.
Ist das der Wortlaut der Aufgabe? Hast du das dann so aufgefasst, dass du das gefundene Wort in das zweite Array kopieren sollst?

Das ist eigentlich Quatsch. Du weißt doch genau, welches Wort du suchst, es steckt hartcodiert in deinem Programmcode. Daher brauchst du es gar nicht aus dem durchsuchten String zu kopieren, du könntest es direkt in das zweite Array schreiben, wenn du es gefunden hast.

Worauf ich hinaus will: Vielleicht ist das zweite Array für einen anderen Zweck gedacht: Da drin soll möglicherweise vorher stehen, welches Wort gesucht werden soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Xanatus Danke, genau darauf hätte ich kommen müssen.

Ich habe das genze etwas umgeschrieben und das Programm läuft jetzt.

@klotzkopp Der zweite array war einfach eine spontane idee,hab es jetzt rausgenommen.

#include <stdio.h>

#include <stdlib.h>

#define ZEICHEN 60  /* Anzahl zugelassene Zeichen */


main()

{

 char text[ZEICHEN];

 int i=0;

 char c;


 /* Eingabe */

 printf("\nGeben Sie eine Zeichenkette ein:");

 c = getchar();

     while(c != '\n'){

              text[i]=c;

              i++;

              c = getchar();

     }

 text[i] = '\0';


 /* Zeile nach dem Wort Poker durchsuchen */

 for(i=0;i!='\n';i++)

 {

    if(text[i] == 'p' && text[i+1] == 'o' && text[i+2] == 'k'

    && text[i+3] == 'e' && text[i+4] == 'r')

    {

       printf("\nDas Wort Poker ist im Text vorgekommen");

       break;

    } 

     else 

    {

       printf("\nDas Wort Poker kam nicht im Text vor!");   

       break;

    } 

 }


 system("pause");

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Programm hat 2 riesen große Fehler welche zu einem Absturz oder wenn es etwas wäre wo andere mit arbeiten würden zum ausführen von Schadcode führen können.

Lies dir mal das hier durch: Pufferüberlauf ? Wikipedia

Im Konkreten sind die Probleme einmal das einlesen der Benutzereingabe und die Suchschleife.

Schau dir an was passiert wenn der Benutzer mehr als 60 Zeichen eingibt und was in der Schleife passiert wenn in text mehr als 55 Zeichen drin stehen.

PS: system("pause") am Ende solltest du auch nicht verwenden weil das nur zufällig unter Windows klappt. Das kannst du aber zum Beispiel durch getchar oder ähnlichem ersetzten wenn du am Ende asu irgendeinem Grund noch auf einen Tastendruck warten willst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier das erweitete Programm um Erkennung des Wortes auch in Falle von Großbuchtaben und Beachtung des Pufferüberlaufes, sowie die Änderung der Suchschleife.

Es sollten nur auch die 2 Probleme gelöst sein.

Und system("pause") weil ich ausschließlich unter windows arbeite und das bruache ich für das Anzeige Fenter.

 #include <stdio.h>

#include <stdlib.h>

#define ZEICHEN 60  /* Anzahl zugelassene Zeichen */

int main()

{

 char text[ZEICHEN];

 int i=0;

 char c;


 /* Eingabe */

 do{

     printf("\nGeben Sie eine Zeichenkette ein:");

     c = getchar();

         while(c != '\n'){

                 /* Falls Großbuchstaben im Text vorkommen,

                 Sollen diesen in Kleinbuchstaben umgewndelt werden  */

                  if ('A' <= c && c <= 'Z')

                  {

                    c =(c + 'a' - 'A'); 


                  }

                  text[i]=c;

                  i++;

                  c = getchar();    

         }

}while(i >= 60);

 text[i] = '\0';

 //printf("%s",text);


 /* Zeile nach dem Wort Poker durchsuchen */

 for(i=0;i < 55;i++)

 {

    if(text[i] == 'p' && text[i+1] == 'o' && text[i+2] == 'k'

    && text[i+3] == 'e' && text[i+4] == 'r')

    {

       printf("\nDas Wort Poker ist im Text vorgekommen!");

       break;

    } 

     else 

    {

       printf("\nDas Wort Poker kam nicht im Text vor!");   

       break;

    } 

 }


 system("pause");

 return 0;

}/*END_amin() */

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...