Strstr Verständnisproblem

Hallo,
Irgendwie glaube ich dass ich dass ich die Funktion strstr() noch nciht ganz verstanden habe. Habe zwar shcon in Büchern was gelesen und mich auch schon im Internet schlau gemacht, aber mein Fehler ist mir bis jetzt noch nicht bewusst. Ich versuche ein kleines Programm zu schreiben welches gewisse Strings in einem andern String durchsuchen soll und wenn es diesen gefunden hat ihn auch ausgeben. doch leider gibt er mir dazu noch den String aus in dem Gesucht werden soll :frowning:

include 
#include 
#include 


 char \*zahlen[] = {"eins","zwei","drei","vier","fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf"};

 char \*woerter[] = {"Endreim","Kurzweil", "Nachtfalter", "Wohnviertel", "Neunauge", "Weinstein",
 "Erdreich", "Achtung", "Segelflieger", "Pfalzwein", "Radreifen", "Gehhelfer",
 "Leinsamen"};


int main(void)
{
 int i, j, wo;

 for (i = 0; woerter[i] != '\0'; i++){
 for(j = 0; zahlen[j] != '\0'; j++){
 if(strstr(woerter[i], zahlen[j]))
 printf("%s\n", zahlen[j]);
 }
 }

 return 0;
}

Kann mich vielleicht mal jemand über meinen Fehler aufkläre?? :wink:
Schon mal Danke im voraus

Gruß Benny

#include
#include
#include

char *zahlen[] = {„eins“,„zwei“,„drei“,„vier“,„fünf“,
„sechs“, „sieben“, „acht“, „neun“, „zehn“, „elf“};

char *woerter[] = {„Endreim“,„Kurzweil“, „Nachtfalter“,
„Wohnviertel“, „Neunauge“, „Weinstein“,
„Erdreich“, „Achtung“, „Segelflieger“,
„Pfalzwein“, „Radreifen“, „Gehhelfer“,
„Leinsamen“};

int main(void)
{
int i, j, wo;

for (i = 0; woerter[i] != ‚\0‘; i++){
for(j = 0; zahlen[j] != ‚\0‘; j++){
if(strstr(woerter[i], zahlen[j]))
printf("%s\n", zahlen[j]);
}
}

return 0;
}

Kann mich vielleicht mal jemand über meinen Fehler aufkläre??
:wink:
Schon mal Danke im voraus

Gruß Benny

char *strstr( const char *string1, const char *string2 );

returns a pointer to the first occurrence of string2 in string1, or NULL if string2 does not appear in string1. If string2 points to a string of zero length, the function returns string1.

d.h.

char str1[] = „abcdef“;
char str2[] = „cde“;
char str3[] = „cdf“;

dann liefert

char* psz = strstr( str1, str2 )

einen Zeiger auf das erste Zeichen innerhalb str1, welches den Beginn des ersten Vorkommens von str2 im String str1 zeigt;

ein

printf( „%s“, psz );

würde in dem Fall

cdef

ausgeben;

psz = strstr( str1, str3 );

würde den NULL-Pointer liefern;

strstr gibt einen Zeiger auf die erste Position des gefundenen Strings zurück.
Du musst den Rückgabewert der funktion erst speichern und dann abfragen ub der Zeiger null ist. Wenn Ungleich null, dann benutze den Zeiger um den String auszugeben.

Hallo Benny,
ich habe diese Funktion noch nicht verwendet, habe aber in der Borland-Hilfe folgendes gefunden:

Header-Datei

string.h

Kategorie

Prototypisierte Routinen von C++, Arbeitsspeicher- und String-Bearbeitungsroutinen

Prototyp

char *strstr(const char *s1, const char *s2); /* nur C */
const char *strstr(const char *s1, const char *s2); // nur C++
char *strstr(char *s1, const char *s2); // nur C++
wchar_t * wcsstr(const wchar_t *s1, const wchar_t *s2);
unsigned char * _mbsstr(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Sucht einen String nach dem Vorkommen eines bestimmten Teilstrings ab.

strstr sucht den über s1 angegebenen String nach dem ersten Vorkommen des Teilstrings s2 ab.

Rückgabewert

strstr liefert einen Zeiger auf den Beginn von s2 in s1 zurück bzw. den Zeigerwert null, wenn s2 in s1 nicht enthalten ist.

Beispiel:
#include
#include

int main(void)
{
char *str1 = „Borland International“, *str2 = „nation“, *ptr;

ptr = strstr(str1, str2);
printf(„The substring is: %s\n“, ptr);
return 0;
}

Ich hoffe ich konnte Dir helfen.

Viele Grüße aus Oberfranken
Helmut

Hallo Benny,
ich habs mir nochmal angeschaut. Dein Fehler liegt nicht in der Verwendung von strstr(), sondern in den Bedingungen der Schleifen.
woerter[i] != ‚\0‘ funktioniert nicht.
So gehts.

for (i = 0; i