String nach Zeichen aus char-Array durchsuchen
-
Die "richtige" Abbruchbedingung ist nicht
i < strlen(string)
sondernfor(int i = 0; string[i] != '\0'; i++)
-
Vielen Dank []_ für deinen Tipp, speziell auch mit der strlen und DirkB für die Abbruchbediengung!
Werde es gleich später so versuchen!
-
Wenn du die Idee von []_ umsetzt, dann wirst du feststellen, dass die Paramterliste meinem Vorschlag sehr ähnlich ist.
Ich habe size_t genommen, da es der vorgesehene Typ dafür ist.
Allerdings sollte das i dann auch vom Typ size_t sein.Ich gehe jetzt nicht davon aus, das du so große Strings hast, das int an seine Grenzen stößt, aber man kann es ja gleich richtig machen.
-
SeppJ schrieb:
Teste und verbessere erst einmal die Originalfunktion. Die ist
1. falschDies ist viel wichtiger! Kümmer dich erst einmal darum ,den einfachen Fall richtig hinzubekommen:
-
Tipp: welchen Wert hat
i
im ersten und im zweiten Durchlauf deiner Schleife?
-
Ich check es einfach nicht, sorry
Mein Code sieht jetzt erstmal wie folgt aus.
#include <stdio.h> #include <string.h> int suche(char string[], char zeichen[]) { for(int i = 0; string[i] != '\0'; i++) { for(int a = 0; zeichen[a] != '\0'; a++) { if(string[i] == zeichen[a]) return 1; else ++a; } } return 0; } int main(int argc, const char * argv[]) { char string[] = "Hello World!"; char zeichen[] = {'a','A','x','X','5','6','8'}; if(suche(string, zeichen)) { printf("Der String enhält eines der gesuchten Zeichen!"); } else printf("Der String enthält keines der gesuchten Zeichen!"); }
-
zeichen enthält kein Stringende-Kennzeichen, deshalb undefiniertes Verhalten.
-
Danke Wutz,
trotzdem funktioniert das Programm nicht so, wie es soll.
-
Du inkrementierst a doppelt und überspringst damit Zeichen.
-
Hab den else-Block rausgenommen und siehe da, es funktioniert.
Warum war ich nur so doofVielen Dank!