Algorytmy dla stringów
Wyszukuj i dziel wydajnie
Algorytmy dla stringów to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Wyszukiwanie za pomocą find
find zwraca indeks podciągu albo npos, jeśli go nie znaleziono, działając bezpośrednio na widoku i bez kopiowania.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "key=value";
auto pos = sv.find('=');
std::cout << pos << "\n"; // 3
}Sprawdzanie npos
Zawsze należy porównać wynik wyszukiwania z std::string_view::npos, zanim zostanie użyty jako indeks.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "abc";
if (sv.find('z') == std::string_view::npos)
std::cout << "not found\n";
}Sprawdzanie prefiksu i sufiksu
starts_with i ends_with (C++20) jasno wyrażają zamiar i pozwalają uniknąć ręcznego porównywania podciągów.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "report.pdf";
std::cout << sv.starts_with("report") << "\n";
std::cout << sv.ends_with(".pdf") << "\n";
}Wyodrębnianie pola
Połączenie find z substr umożliwia rozdzielenie pary klucz/wartość bez alokowania nowych stringów.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "name=Ada";
auto eq = sv.find('=');
std::cout << sv.substr(0, eq) << " : " << sv.substr(eq + 1) << "\n";
}Dzielenie według separatora
Tokeny można przetwarzać, wielokrotnie wyszukując separator i pobierając podwidoki; każdy token jest tylko widokiem.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "a,b,c";
size_t start = 0, pos;
while ((pos = sv.find(',', start)) != std::string_view::npos) {
std::cout << sv.substr(start, pos - start) << "\n";
start = pos + 1;
}
std::cout << sv.substr(start) << "\n";
}Wyszukiwanie od końca
rfind wyszukuje od końca, co jest przydatne przy pobieraniu rozszerzenia pliku lub ostatniego separatora.
#include <iostream>
#include <string_view>
int main() {
std::string_view path = "/usr/local/bin";
auto slash = path.rfind('/');
std::cout << path.substr(slash + 1) << "\n"; // bin
}Usuwanie białych znaków
Do usuwania białych znaków należy używać find_first_not_of i find_last_not_of wraz z remove_prefix/remove_suffix, bez żadnego kopiowania.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = " hi ";
sv.remove_prefix(sv.find_first_not_of(" "));
sv.remove_suffix(sv.size() - 1 - sv.find_last_not_of(" "));
std::cout << "[" << sv << "]\n"; // [hi]
}Porównywanie widoków
Widoki obsługują == i compare do porównań leksykograficznych, porównując znaki, a nie wskaźniki.
#include <iostream>
#include <string_view>
int main() {
std::string_view a = "apple", b = "apple";
std::cout << (a == b) << "\n"; // 1
}Zliczanie wystąpień
Pętla z użyciem find, przesuwająca pozycję za każdym znalezionym wystąpieniem, zlicza liczbę wystąpień znaku lub podciągu.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "mississippi";
int count = 0;
for (size_t p = sv.find('s'); p != std::string_view::npos; p = sv.find('s', p + 1)) ++count;
std::cout << count << "\n"; // 4
}Algorytmy nie wymagają alokacji
Wszystkie te operacje działają na tym samym bazowym buforze. Tokeny i przycięte wyniki są podwidokami; alokacja na stercie następuje dopiero przy tworzeniu std::string.
Pamiętaj o czasie życia
Podwidoki tworzone przez te algorytmy współdzielą czas życia oryginalnego bufora. Nie należy pozwolić, aby istniały dłużej niż źródłowy string.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat algorytmów string_view.
Podsumowanie
Poznałeś(-aś) algorytmy operujące na widokach stringów:
find/rfindzwracają pozycje albonpos.starts_with/ends_withsprawdzają prefiksy i sufiksy.- Dzielenie, przycinanie i tokenizacja tworzą podwidoki bez alokacji.
- Podwidoki współdzielą czas życia źródła, dlatego należy uważać na wiszące widoki.
Często zadawane pytania
Czy lekcja „Algorytmy dla stringów” jest bezpłatna?
Tak — pełny tekst „Algorytmy dla stringów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Algorytmy dla stringów”?
Wyszukuj i dziel wydajnie Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Algorytmy dla stringów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego string_view
- Tworzenie widoków
- Pułapki i cykle życia
- Algorytmy dla stringów