Jak mogę policzyć liczbę "_"
w ciągu takich jak "bla_bla_blabla_bla"
?
c++
string
pattern-matching
Andre de Boer
źródło
źródło
Odpowiedzi:
źródło
std::count
rodzaju zwrotówiterator_traits<InputIt>::difference_type
, które dla większości standardowych pojemnikówstd::ptrdiff_t
, niestd::size_t
.Pseudo kod:
EDYCJA: przykładowy kod C ++:
Należy pamiętać, że jest to kod używać wraz z
std::string
, jeśli używaszchar*
, wymienićs.size()
zstrlen(s)
.Uwaga: rozumiem, że chcesz czegoś „tak małego, jak to możliwe”, ale sugeruję skorzystanie z tego rozwiązania. Jak widać, możesz użyć funkcji do enkapsulacji kodu, abyś nie musiał
for
za każdym razem wypisywać pętli, ale możesz po prostu użyć jejcount_underscores("my_string_")
w pozostałej części kodu. Korzystanie z zaawansowanych algorytmów C ++ jest tutaj z pewnością możliwe, ale myślę, że to przesada.źródło
Staromodne rozwiązanie z odpowiednio nazwanymi zmiennymi. Daje to kodowi odrobinę ducha.
Edycja: około 8 lat później, patrząc na tę odpowiedź, wstydzę się, że to zrobiłem (mimo że usprawiedliwiałem to jako snarky szturchanie na pytanie o niskim wysiłku). To jest toksyczne i nie jest OK. Nie usuwam posta; Dodam te przeprosiny, aby pomóc zmienić atmosferę w StackOverflow. Więc OP: przepraszam i mam nadzieję, że dobrze odrabiłeś pracę domową pomimo mojego trollingu i że takie odpowiedzi, jak moje, nie zniechęciły Cię do uczestnictwa w witrynie.
źródło
źródło
Nazywasz to ... Wersja Lambda ... :)
Potrzebujesz kilku załączników ... Zostawiam to jako ćwiczenie ...
źródło
Użycie funkcji lambda do sprawdzenia, czy znak jest „_”, spowoduje tylko zwiększenie liczby, w przeciwnym razie znak nie będzie prawidłowy
źródło
[]( char c ){if(c =='_') return true; }
wywołuje niezdefiniowane zachowanie, ponieważ nieIstnieje kilka metod wyszukiwania std :: string, ale find jest prawdopodobnie tym, czego szukasz. Jeśli masz na myśli ciąg w stylu C, to odpowiednikiem jest strchr. Jednak w obu przypadkach można również użyć pętli for i sprawdzić każdy znak - pętla jest zasadniczo tym, co te dwa kończą.
Kiedy już wiesz, jak znaleźć następną postać z pozycją początkową, nieustannie przyspieszasz wyszukiwanie (tzn. Korzystasz z pętli), licząc od razu.
źródło
Liczenie wystąpień znaków w ciągu jest łatwe:
źródło
Występowanie „_” w łańcuchu źródłowym można znaleźć, korzystając z funkcji łańcucha. Funkcja find () przyjmuje 2 argumenty, pierwszy - ciąg, którego wystąpienia chcemy znaleźć, a drugi argument przyjmuje pozycję początkową. Pętla służy do wyszukiwania wystąpienia do końca łańcucha źródłowego.
przykład:
źródło
Zrobiłbym w ten sposób:
źródło
Zrobiłbym coś takiego :)
źródło
Próbować
źródło
źródło