Jak policzyć liczbę meczów przy użyciu C++ 11: std::regex
?Liczba liczników meczów
std::regex re("[^\\s]+");
std::cout << re.matches("Harry Botter - The robot who lived.").count() << std::endl;
oczekiwany wynik:
7
Jak policzyć liczbę meczów przy użyciu C++ 11: std::regex
?Liczba liczników meczów
std::regex re("[^\\s]+");
std::cout << re.matches("Harry Botter - The robot who lived.").count() << std::endl;
oczekiwany wynik:
7
Można użyć regex_iterator
wygenerować wszystkie mecze, a następnie użyć distance
je policzyć:
std::regex const expression("[^\\s]+");
std::string const text("Harry Botter - The robot who lived.");
std::ptrdiff_t const match_count(std::distance(
std::sregex_iterator(text.begin(), text.end(), expression),
std::sregex_iterator()));
std::cout << match_count << std::endl;
Czy możesz wyjaśnić, co 'std :: sregex_iterator' zwraca i co" odległość "między dwoma oznacza? –
@muntoo: 'sregex_iterator' jest typedef nad' regex_iterator', które iteruje nad wszystkimi dopasowaniami w tekście. 'distance' to funkcja biblioteki standardowej, która oblicza liczbę elementów w zakresie iteratora (w takim przypadku odczytuje wszystkie dopasowania i zwraca ile ich jest). –
Witam. Nawet jeśli jest to stary wątek: myślę, że możesz upuścić operację match_count (która w C++ 11 i tak nie istnieje), ponieważ (w) sregex :: iterator już iteruje, jak wspomniałeś, nad meczami. Std :: distance powinien więc zwracać liczbę meczów. Próbowałem go używając gcc 4.6.1 i VS 2013 bez match_count i działa dobrze. – gilgamash
Można to wykorzystać:
int countMatchInRegex(std::string s, std::string re)
{
std::regex words_regex(re);
auto words_begin = std::sregex_iterator(
s.begin(), s.end(), words_regex);
auto words_end = std::sregex_iterator();
return std::distance(words_begin, words_end);
}
Przykład użycia:
std::cout << countMatchInRegex("Harry Botter - The robot who lived.", "[^\\s]+");
wyjściowa:
7
A twoja moc jest .... –
@EdHeal otrzymuję błąd kompilacji [] (http://ideone.com/uxyrV): 'error: 'regex_count' nie został zadeklarowany w tym zakresie". ;) –