backdraft Geschrieben 16. April 2003 Geschrieben 16. April 2003 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
Guybrush Threepwood Geschrieben 16. April 2003 Geschrieben 16. April 2003 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
backdraft Geschrieben 16. April 2003 Autor Geschrieben 16. April 2003 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.
Klotzkopp Geschrieben 16. April 2003 Geschrieben 16. April 2003 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.
Goos Geschrieben 16. April 2003 Geschrieben 16. April 2003 Bei nem CString kannst auch ansich mit einer Zeile auskommen. zum Beispiel so: int anzahl = myStr.Replace(cZeichen, cZeichen); Goos
A-RAM Geschrieben 16. April 2003 Geschrieben 16. April 2003 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
Crush Geschrieben 16. April 2003 Geschrieben 16. April 2003 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; }
Klotzkopp Geschrieben 17. April 2003 Geschrieben 17. April 2003 @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.
Guybrush Threepwood Geschrieben 17. April 2003 Geschrieben 17. April 2003 @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
nic_power Geschrieben 17. April 2003 Geschrieben 17. April 2003 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden