Spezifische buchstaben in einem string zählen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich weiß nicht, ob eine Schleife wirklich der schnellste Weg ist.

    Ich würde ein CharakterSet mit "a" bzw mit "aA" erstellen und dann zu einem Array trennen.
    Vom Array dann den -count holen.

    Das könnte eine schnelle Möglichkeit sein, da möglicherweise Apple intern besser mit dem String wurstelt, als wenn wir ein char von einem NSString abholen.

    Man könnte auch alle "a" zu Nix ersetzen und die Differenz der Länge ermitteln.

    Es gibt mehrer Wege und Du kannst das ja x mal rödeln lassen, um zu schauen was rockt.


    Viele Grüße
  • little_pixel schrieb:

    Ich weiß nicht, ob eine Schleife wirklich der schnellste Weg ist.

    Ich würde ein CharakterSet mit "a" bzw mit "aA" erstellen und dann zu einem Array trennen.
    Vom Array dann den -count holen.

    Das könnte eine schnelle Möglichkeit sein, da möglicherweise Apple intern besser mit dem String wurstelt, als wenn wir ein char von einem NSString abholen.

    Man könnte auch alle "a" zu Nix ersetzen und die Differenz der Länge ermitteln.

    Es gibt mehrer Wege und Du kannst das ja x mal rödeln lassen, um zu schauen was rockt.


    Viele Grüße
    Ich wäre jetzt auch mit einer Schleife rangegangen. Ich weiss jetzt nicht, wie lang der String ist, aber wenn ich den anderen Thread des TO als Grundlage nehme, will er einen Namensgenerator schreiben. Da werden wohl die Strings jetzt nicht ultralang ;) "Schackeliene" enhält 3 e's ;)
    Ich bin gegen Signaturen!!!
  • little_pixel schrieb:

    Ich weiß nicht, ob eine Schleife wirklich der schnellste Weg ist.

    Ich würde ein CharakterSet mit "a" bzw mit "aA" erstellen und dann zu einem Array trennen.
    Vom Array dann den -count holen.

    Das könnte eine schnelle Möglichkeit sein, da möglicherweise Apple intern besser mit dem String wurstelt, als wenn wir ein char von einem NSString abholen.

    Man könnte auch alle "a" zu Nix ersetzen und die Differenz der Länge ermitteln.

    Es gibt mehrer Wege und Du kannst das ja x mal rödeln lassen, um zu schauen was rockt.


    Viele Grüße
    Ich bezweifle dass das schneller ist. Und ich bezweifle dass der Fragensteller auch nur einen Finger krümmt. Er erwartet Code von dir, den er kopieren und einfügen kann.
  • In Swift kann man das auch funktional lösen:

    Quellcode

    1. let theCharacters = Array("Ich habe keinen Plan")
    2. let theCount = theCharacters.reduce(0) { $1 == "a" ? $0 + 1 : $0 }
    Die erste Zeile erzeugt ein Array mit den Zeichen des Strings. (Achtung: In anderen Sprachen würde das ein Array mit einem String erzeugen.) Und die zweite Zeile zählt die "a"s in dem Array.
    „Meine Komplikation hatte eine Komplikation.“
  • Nutze doch reguläre Ausdrücke:


    C-Quellcode

    1. NSString *searchText = "Ich habe keinen Plan";
    2. NSError *error = NULL;
    3. NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[Aa]" options:0 error:&error];
    4. NSUInteger numberOfMatches = [regex numberOfMatchesInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
    Keine Schleife und sehr schnell, vor allen bei großen Texten
  • macmoonshine schrieb:

    In Swift kann man das auch funktional lösen:

    Quellcode

    1. let theCharacters = Array("Ich habe keinen Plan")
    2. let theCount = theCharacters.reduce(0) { $1 == "a" ? $0 + 1 : $0 }
    Die erste Zeile erzeugt ein Array mit den Zeichen des Strings. (Achtung: In anderen Sprachen würde das ein Array mit einem String erzeugen.) Und die zweite Zeile zählt die "a"s in dem Array.
    Ich oute mich jetzt mal als Noob. Ist das dein ernst oder ne Verarsche? Wenn es Dein Ernst ist, kannst Du mir dann mal erklären wie das funktioniert?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    macmoonshine schrieb:

    In Swift kann man das auch funktional lösen:

    Quellcode

    1. let theCharacters = Array("Ich habe keinen Plan")
    2. let theCount = theCharacters.reduce(0) { $1 == "a" ? $0 + 1 : $0 }
    Die erste Zeile erzeugt ein Array mit den Zeichen des Strings. (Achtung: In anderen Sprachen würde das ein Array mit einem String erzeugen.) Und die zweite Zeile zählt die "a"s in dem Array.
    Ich oute mich jetzt mal als Noob. Ist das dein ernst oder ne Verarsche? Wenn es Dein Ernst ist, kannst Du mir dann mal erklären wie das funktioniert?
    Gruß

    Claus
    $0 bezieht sich auf den counter (der ja bei 0 startet) und $1 ist jeweils das objekt aus dem array.
  • gritsch schrieb:

    Thallius schrieb:

    macmoonshine schrieb:

    In Swift kann man das auch funktional lösen:

    Quellcode

    1. let theCharacters = Array("Ich habe keinen Plan")
    2. let theCount = theCharacters.reduce(0) { $1 == "a" ? $0 + 1 : $0 }
    Die erste Zeile erzeugt ein Array mit den Zeichen des Strings. (Achtung: In anderen Sprachen würde das ein Array mit einem String erzeugen.) Und die zweite Zeile zählt die "a"s in dem Array.
    Ich oute mich jetzt mal als Noob. Ist das dein ernst oder ne Verarsche? Wenn es Dein Ernst ist, kannst Du mir dann mal erklären wie das funktioniert?Gruß

    Claus
    $0 bezieht sich auf den counter (der ja bei 0 startet) und $1 ist jeweils das objekt aus dem array.
    Also ich versteh das Grundprinzip irgendwie nicht. Für mich sieht es so aus als wäre reduce eine Methode die selbst definiert wird durch die Anweisungen zwischen den geschweiften Klammern. Dort wird aber nirgendwo eine Schleife ausgeführt. Es würde also doch nur das erste Element des Arrays mit a verglichen und nicht alle?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • kmr schrieb:

    schumi schrieb:

    Nutze doch reguläre Ausdrücke:
    Für jemanden, dem die Doku zu Strings schon zu hoch ist, sind reguläre Ausdrücke der direkte Weg in den Untergang. ;)
    Ganz anders als eine funktionale Lösung in Swift, die sofort verständlich ist.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    macmoonshine schrieb:

    In Swift kann man das auch funktional lösen:

    Quellcode

    1. let theCharacters = Array("Ich habe keinen Plan")
    2. let theCount = theCharacters.reduce(0) { $1 == "a" ? $0 + 1 : $0 }
    Die erste Zeile erzeugt ein Array mit den Zeichen des Strings. (Achtung: In anderen Sprachen würde das ein Array mit einem String erzeugen.) Und die zweite Zeile zählt die "a"s in dem Array.
    Ich oute mich jetzt mal als Noob. Ist das dein ernst oder ne Verarsche? Wenn es Dein Ernst ist, kannst Du mir dann mal erklären wie das funktioniert?Gruß
    Claus
    $0 bezieht sich auf den counter (der ja bei 0 startet) und $1 ist jeweils das objekt aus dem array.
    Also ich versteh das Grundprinzip irgendwie nicht. Für mich sieht es so aus als wäre reduce eine Methode die selbst definiert wird durch die Anweisungen zwischen den geschweiften Klammern. Dort wird aber nirgendwo eine Schleife ausgeführt. Es würde also doch nur das erste Element des Arrays mit a verglichen und nicht alle?
    Die Schleife wird von reduce() ausgeführt. Das ist ähnlich wie -enumerateWithBlock:. Da siehst du die Schleife ja auch nicht.

    Das Ganze hat keinen Wert und ist kompliziert. Das gefällt den Leuten offenkundig.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?