Veröffentlicht 16. April 200322 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 200322 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 200322 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 200322 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 200322 j Bei nem CString kannst auch ansich mit einer Zeile auskommen. zum Beispiel so: int anzahl = myStr.Replace(cZeichen, cZeichen); Goos
16. April 200322 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 200322 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 200322 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 200322 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 200322 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.