Überprüfung von Strings
-
Hallo ich soll im Zuge einer Übung einige Überprüfungen bei einem String durchführen.
Der String darf nur eine bestimmte Anzahl an Zeichen beinhalten und dann abgeschnitten werden, der Rest soll dann wieder in einem seperaten String gespeichert werden.
Außerdem soll überprüft werden welche Zeichen der string enthält (bspw. wie viele Zahlen)
Als letztes soll dann noch die Länge ermittelt werden.
Das ganze soll ohne der Funktionen aus string.h passieren.
__________________________________________________________________________________
Ich will hier nochmal betonen das ich keine fertige Lösung haben will, sondern Denkanstöße
Zur Ermittlung der Länge habe ich mir eine while-Schleife überlegt:
#include <stdio.h> int main(void) { char string [11]; char *pointer; pointer=&string; int counter=0; scanf("%s", string); while(pointer++){ if (pointer!='\0') counter++; else if (pointer=='\0') { printf("%d", counter); } } return (0); }
Läuft leider nicht
Wo ist denn da mein Denkfehler ?
Danke euch schonmal
-
while(pointer++)
Denk noch mal genau darüber nach, was du da prüfen willst. Vermutlich nicht den Wert von
pointer
.Außerdem: "Läuft nicht" ist die denkbar schlechteste Fehlerbeschreibung. Vielleicht habe ich dir gerade die Antwort auf ein ganz anderes Problem gegeben. Drück dich präzise aus!
P.S.: Meckert dein Compiler nicht bei Zeile 9? Falls nein, dann stell ihn mal strenger ein. Und wenn er dann meckert, dann mach den Grund dafür weg (das heißt, mach den eigentlichen Fehler weg, nicht dass du ihn wegcastest).
-
Ah okay Entschuldige.
Ich will prüfen wann ich '\0' erreiche. Also mein Ziel war es sozusagen "Slot" für Slot des Arrays durchzulaufen und zu zählen wie oft ich das mache bis ich \0 erreiche.
Zeile 9 ohne & ?
-
Oozaru2502 schrieb:
Ich will prüfen wann ich '\0' erreiche.
Du bist ein char?
-
Oozaru2502 schrieb:
Also mein Ziel war es sozusagen "Slot" für Slot des Arrays durchzulaufen
Und warum durchläufst du dein Array dan nicht direkt mit dem Subskript-Operator [] sondern verwendest einen extra Zeiger dafür?
Dass du Zeiger noch nicht verstanden hast, lässt sich anpointer=&string;
ablesen, was UB bedeutet.
-
Okay.
Also wollte nun das ganze mit einer for-Schleife lösen
#include <stdio.h> int main(void) { char string [11]; int counter=0; scanf("%s", string); printf("%c", string[2]); for (string[0]; string!='\0'; *(string+1)) { counter++; } printf("%d", counter); return(0); }
Wie verlgleiche ich eine nte Stelle im Array ob diese \0 ist ?
-
Was machst du denn in Zeile 13?
Und alle drei Parameter der for-Schleife sind falsch oder überflüssig.
-
Na ja. Das hilft wohl wenig. Daher auf die Schnelle
#include <stdio.h> int main(void) { char string [11]; int counter=0; scanf("%s", string); printf("%s", string); for (counter=0; string[counter]!='\0'; counter++)) {} printf("%d", counter); return(0); }
Kritik an dieser Lösung:
1. Die Eingabe ist ungesichert. Wehe, wenn ein Hacker 11 oder mehr Zeichen eingibt. Immer das sichere scanf_s für die Texteingabe nutzen.
2. counter wird derzeit zweimal auf 0 gesetzt. Einmal reicht.
-
Ah Super ! Danke! Das hab ich jetzt verstanden.
Nur wie schneide ich einen Teil eines Strangs ab und speicher den Rest in einem neuen ?
Ich komme nicht drauf wie das kopieren funktionieren soll...