Lassen Sie ein Wort als eine Folge von aufeinanderfolgenden alphanumerischen Zeichen definiert werden. Wörter werden von beliebigen nicht alphanumerischen Zeichen analysiert. Ex.Der effizienteste Weg zum Zählen der Anzahl alphanumerischer Wörter innerhalb einer Zeichenfolge mit C++
„Hallo, mein erster Name @ ist @ Kevin :)“
Ausgang: 6
Ich weiß, würde einfach durch die Zeichenfolge ein mit for-Schleife gehen könnte, aber was der effizienteste Weg sein würde zurückkehren die richtige Ausgabe mit dem vollen Umfang der C++ 11-Bibliothek?
Meine aktuelle Iteration:
int findWords(string line) {
regex AN("[[:alnum:]]");
int count = 0;
bool state = false;
for (char c : line) {
string s(1, c);
bool match = regex_match(s, AN);
if (match && !state) {
state = true;
}
else if (!match && state) {
count++;
state = false;
}
else {
continue;
}
}
if (state == true) { //won't count last word otherwise
count++;
}
return count;
}
Es sei denn, Sie verwalten einige grundlegende Gesetze der Physik des Universums zu ändern, müssen Sie „einfach gehen durch die Zeichenfolge einer for-Schleife“ oder ein gleichwertiges Verfahren. Und eine Rose mit irgendeinem anderen Namen ... –
Was lässt Sie denken, dass Sie vermeiden können, die Schnur zu durchlaufen? Und was noch wichtiger ist, was haben Sie versucht - profiliert und gefunden? – Nim
C++ ist wirklich gut darin, über Strings zu iterieren. Das wird mit ziemlicher Sicherheit am schnellsten sein. Übrigens, gibt es wirklich eine Folge von 6 alphanumerischen Zeichen in dieser Zeichenfolge? –