Пусть слово определяется как любая строка последовательных буквенно-цифровых символов. Слова анализируются любыми не буквенно-цифровыми. Ex.Самый эффективный способ подсчета количества буквенно-цифровых слов в строке с использованием C++
«Привет мой первый имя @ это @ Кевин :)»
выход: 6
Я знаю, что бы можно было просто пройти через строку, используя для цикла, но то, что будет наиболее эффективным способом, чтобы вернуться правильный выход, используя всю библиотеку C++ 11?
Моя текущая итерация:
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;
}
Если вы не смогли изменить некоторые фундаментальные законы физики этой вселенной, вы должны «просто пройти через строку, используя для цикла», или эквивалентный процесс. И роза от любого другого имени ... –
Что заставляет вас думать, что вы можете избежать повторения через строку? И что еще более важно, что вы пробовали - профилировали и нашли? – Nim
C++ действительно хорош в итерации по строкам. Это почти наверняка будет самым быстрым. Кстати, действительно ли существует последовательность из 6 буквенно-цифровых символов в этой строке? –