16. April 200323 j Hi! Gibt es eine Funktion, mit der ich die Häufigkeit des Vorkommens eines Zeichens (z.B. eines Punktes) in einem String zählen kann? MfG backdraft
16. April 200323 j Hi, das kannst du doch in 3 Zeilen selber schreiben:) Zum Beispiel so: for (int i=0; i<strlen(szString); i++) if(szString[i] == cZeichen) nAnzZeichen++; [/PHP] Gruß Guybrush
16. April 200323 j Original geschrieben von Guybrush Threepwood Hi, das kannst du doch in 3 Zeilen selber schreiben:) Gruß Guybrush Sorry, da hatte ich mich vielleicht n bisschen unklar ausgedrückt: Ich meine bei nem CString-Objekt, nicht bei nem 0-Terminierten String.
16. April 200323 j Original geschrieben von backdraft Sorry, da hatte ich mich vielleicht n bisschen unklar ausgedrückt:Nicht nur das, denn CStringhat nichts mit Standard-C++ zu tun, und mit C schon gar nichts. --> Thema verschoben. P.S.: GTs Lösung funktioniert trotzdem, wenn du vorher aus dem CString einen const char* machst. Da reicht eine einfache Zuweisung, weil CString dafür einen cast-Operator hat.
16. April 200323 j Bei nem CString kannst auch ansich mit einer Zeile auskommen. zum Beispiel so: int anzahl = myStr.Replace(cZeichen, cZeichen); Goos
16. April 200323 j schlecht: for (int i=0; i<strlen(szString); i++) if(szString == cZeichen) nAnzZeichen++; gut: int *y = (int*) &szString + strlen(szString) for (int *i = (int*) &szString; i != y; ++i) if(szString[*i] == cZeichen) ++nAnzZeichen; Zeiger + Präfixnotation *gg
16. April 200323 j Nicht böse sein, aber da sind ein paar kleine Fehler reingerutscht: int *y = (int*) &szString + strlen(szString) // Vorsicht: int klappt nur bei Unicode oder WChar; for (int *i = (int*) &szString; i != y; ++i) { // Klammern vergessen, sonst wird nur einmal durchgerauscht if(szString[*i] == cZeichen) // nur *i ohne szString-Index, weil der Zeiger i selber die Adresse von szString ist ++nAnzZeichen; }
17. April 200323 j @A-RAM: Dass das ganze nur funktionieren kann, wenn sizeof int == sizeof char, hat Crush ja schon geschrieben. Aber auch der Adressoperator vor szString ist in beiden Fällen falsch. Und wenn du statt int* (wieso eigentlich int*?) char* verwendest, sind auch die casts nicht mehr notwendig. @Crush: Die Klammern sind in diesem konkreten Fall nicht zwingend notwendig.
17. April 200323 j @A-RAM ich weiß nicht was daran so gut sein soll, wenn du`s unbedingt mit nem Zeiger willst, hätte ich es so gemacht: for (char* p = szString; *p; p++) if (*p == cZeichen) nAnzZeichen++; [/PHP] Gruß Guybrush
17. April 200323 j Hallo, Das ist auch deutlich einfacher zu verstehen als das weiter oben gepostete überaus kryptische Beispiel . In der Praxis ist das aber eher unerheblich, da ein guter Compiler die Indizes auf Zeiger abbildet (sofern es einen Laufzeitunterschied geben sollte). Nic
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.