C++ 11'ler std::regex
kullanarak kibrit sayısını nasıl sayarım? Sayım sayıları
std::regex re("[^\\s]+");
std::cout << re.matches("Harry Botter - The robot who lived.").count() << std::endl;
Beklenen çıkışı:
7
C++ 11'ler std::regex
kullanarak kibrit sayısını nasıl sayarım? Sayım sayıları
std::regex re("[^\\s]+");
std::cout << re.matches("Harry Botter - The robot who lived.").count() << std::endl;
Beklenen çıkışı:
7
Onları saymak için distance
kullanmak sonra, tüm maçlarında oluşturmak için regex_iterator
kullanabilirsiniz:
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;
"std :: sregex_iterator" ifadesinin neyi döndürdüğünü ve iki yöntem arasındaki 'mesafeyi' açıklayabilir misiniz? –
@muntoo: 'sregex_iterator', metindeki tüm eşleşmeleri yineleyen 'regex_iterator' üzerinden yazılmış bir yazımdır. 'distance' bir yineleyici aralığındaki elemanların sayısını hesaplayan Standart Kütüphane fonksiyonudur (bu durumda, tüm eşleşmeleri okur ve kaç tane olduğunu döndürür). –
Merhaba. Bu eski bir iş parçacığı olsa bile: (w) sregex :: yineleyici, eşleştirdiğiniz gibi, eşleşme sırasında match_count işlemini (C++ 11'de zaten mevcut değil) bırakabilirsiniz. Böylece std :: mesafe eşleşme sayısını döndürmelidir. Gcc 4.6.1 ve VS 2013'ü match_count olmadan denedim ve gayet iyi çalışıyor. – gilgamash
Bunu kullanabilirsiniz:
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);
}
Örnek kullanım:
std::cout << countMatchInRegex("Harry Botter - The robot who lived.", "[^\\s]+");
Çıktı:
7
Ve çıkış –
@EdHeal ben [derleme hatası] olsun .... ise (http://ideone.com/uxyrV): hata: 'regex_count' bu kapsamda açıklanmadı '. ;) –