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 Zitieren
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 Zitieren
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. Zitieren
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. Zitieren
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 Zitieren
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 Zitieren
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; } Zitieren
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. Zitieren
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 Zitieren
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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.