0Pricing
C++ Academy · Lekcja

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/rfind zwracają pozycje albo npos.
  • starts_with/ends_with sprawdzają 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

  1. Dlaczego string_view
  2. Tworzenie widoków
  3. Pułapki i cykle życia
  4. Algorytmy dla stringów
← Powrót do C++ Academy