Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Also ich habe ein Prob und zwar wir ein Satz in eine String gespeichert, allerdings ist dieser Satz immer verschieden und soll auf ein, zwei Wörter hin unersucht werden sind beide Wörter vorhanden soll eine Meldung ausgegeben werden.

Hallo,

versuchs mal mit der Funktion strstr, die sucht im String nach einem Teilstring.

Danke das war genau das was ich gesucht hab *freu*

Die stringklasse bietet ebenfalls eine Methode find an ....

  • 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.

Was muss ich anders machen.

Aussage oder Frage?

Als erstes würd ich mal den Bufferüberlauf wegmachen. :floet:

(Anmerkung der Redaktion: text1[58] == 'p')

Was gefällt dir an strstr nicht?

(Und für was brauchst du nen zweiten Array?!)

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.

worin steckt da der sinn? wenn du vorhandene Funktionen nicht nutzen willst? 0.o

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';

} 


}

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.

@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");

}

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.

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() */

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.