String nach Zeichen aus char-Array durchsuchen
-
Einfach nur Übung, keine Hausaufgabe.
Danke aber für die bisherigen Antworten.
Den String Stück für Stück nach den Elementen von "Array" zu durchsuchen habe ich bereits versucht, hat aber leider nicht geklappt. Werde später - bin gerade mit etwas anderem beschäftigt - den Versuch hier mal posten.Also danke bis dahin!
-
was seppj mit ineffizient meint ist, dass die stringlänge bei jedem schleifendurchlauf immer wieder neu berechnet wird.
ruf also besser strlen einmal auf und speicher den wert in einer variable. diese variable benutzt du dann im bedingungsteil der for-schleife.F4b14n schrieb:
Toll wäre eine Lösung bei der das Programm mir mitteilt, ob überhaupt ein Zeichen aus dem Array im String enthalten ist und eine, die mir sagt, welche Zeichen wie oft im String enthalten sind.
Das Array sollte z.B. so aussehen char suchen[] = {'a','A','c','C',5,6,7};
Wäre wirklich toll, wenn mir jemand helfen würde
beste Grüße
Fabiannimm ein integer-array, das mindestens genau so viele elemente hat wie dein array suchen.
das integer-array und das array suchen übergibst du an deine suchfunktion.
position 0 im integer-array speichert wie oft das zeichen suchen[0] im string vorkommt, usw.
-
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!