Zeichen in einer Zeichenkette zählen C#
-
Ja die Adresse einer Variablen bekomme ich durch &, wenn ich mich richtig erinnere.
Bsp. &s liefert die Adresse der Variablen s.
Richtig soweit?
-
Im Prinzip ja.
Und wie kommst du an den Inhalt an der Adresse?
-
Ja wenn ich einen Zeiger habe namens Bsp. ptr_a mache ich:
*prt_a = &s;
y = *ptr_a;
Wenn jetzt s=4 ist, zeigt ptr_a auf 4 und y wird der Wert zugewiesen.
-
Soweit so gut. Jetzt noch der große Trick:
int foo[2] = {1,2}; int *ptr = &foo[0]; ptr = ptr + 1; int y = *ptr; // Welchen Wert hat y?
-
2? bzw. foo[1]
-
Benjoo #1 schrieb:
2? bzw. foo[1]
Genau. Und mit diesen drei Zutaten (Adressoperator, Addition von Zahlen zu Pointern und '\0' als Ende von Zeichenketten), die DirkB und ich dir gezeigt haben, fällt dir da eine Möglichkeit ein, mittels eines Pointers zeichenweise durch eine Zeichenkette zu laufen?
-
Hmm, ich steh total aufm Schlauch momentan...
-
Erst nochmal mit Array:
for (i = 0; wort[i] != '\0'; i++) // i<50 ersetzt. { if (wort[i] == buchstabe) anzahl = anzahl+1; }
Du brauchst einen Zeiger auf das Array
char *p; ... p = wort; // bei eienem Array kein &
Beim Vergleich greifst du dann auf das Element mit * zu:
*p != '\0';
Und dann musst du noch den Zeiger weiterzählen
p++
Dann schaust du mal wo das oben hinpassen könnte. (das i brauchst du dann nicht mehr)
-
for (p = wort; *p != '\0'; p++) { if (*p == buchstabe) anzahl = anzahl+1; }
Soweit richtig?
Danke auf jeden Fall, ward mir ne sehr große Hilfe!
-
Prima.
Statt*p != '\0'
kann man auch einfach nur*p
schreiben, da C jeden Wert ungleich 0 als wahr auffasst.
Hier spielt es auch keine Rolle ob du das Post- oder Preinkcrement benutzt.Also wenn du sowas wie
for (p = wort; *p; ++p)
siehst, ist es das Gleiche wie dein Code.