C++ Academy · leksjon

Strengalgoritmer

Søk og splitt effektivt

Leksjon 4 av 413 trinn

Strengalgoritmer er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Søke med find

find returnerer indeksen til en delstreng eller npos hvis den ikke finnes, og arbeider direkte på en view uten kopiering.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "key=value";
    auto pos = sv.find('=');
    std::cout << pos << "\n"; // 3
}

Kontrollere npos

Sammenlign alltid søkeresultatet med std::string_view::npos før De bruker det som en 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";
}

Kontroll av prefiks og suffiks

starts_with og ends_with (C++20) gjør hensikten tydelig og unngår manuelle sammenligninger av delstrenger.

#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";
}

Hente ut et felt

Kombiner find med substr for å dele et nøkkel/verdi-par uten å allokere nye strenger.

#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";
}

Dele ved hjelp av et skilletegn

De kan gå gjennom tokenene ved å finne skilletegnet gjentatte ganger og hente delviews. Hvert token er bare en view.

#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";
}

Søke fra slutten

rfind søker bakover og er praktisk for å hente en filendelse eller det siste skilletegnet.

#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
}

Fjerne innledende og avsluttende mellomrom

Bruk find_first_not_of og find_last_not_of sammen med remove_prefix/remove_suffix for å trimme uten kopiering.

#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]
}

Sammenligne views

Views støtter == og compare for leksikografisk sammenligning. Det er tegnene, ikke pekerne, som sammenlignes.

#include <iostream>
#include <string_view>
int main() {
    std::string_view a = "apple", b = "apple";
    std::cout << (a == b) << "\n"; // 1
}

Telle forekomster

En løkke med find som går videre forbi hvert treff, teller hvor mange ganger et tegn eller en delstreng forekommer.

#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
}

Algoritmer uten allokering

Alle disse operasjonene arbeider på den samme underliggende bufferen. Token og trimmede resultater er delviews; ingen heap-allokering skjer før De oppretter en std::string.

Vær oppmerksom på levetidene

Delviews som opprettes av disse algoritmene, deler levetiden til den opprinnelige bufferen. Ikke la dem leve lenger enn kildestrengen.

Kunnskapssjekk

Kontroller forståelsen av string_view-algoritmer.

Oppsummering

De har lært om string-algoritmer på views:

  • find/rfind returnerer posisjoner eller npos.
  • starts_with/ends_with kontrollerer prefikser og suffikser.
  • Deling, trimming og tokenisering gir delviews uten allokering.
  • Delviews deler kildens levetid. Vær oppmerksom på hengende views.
Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Strengalgoritmer» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Strengalgoritmer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Strengalgoritmer»?

Søk og splitt effektivt Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Strengalgoritmer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hvorfor string_view
  2. Opprette views
  3. Fallgruver og levetider
  4. Strengalgoritmer
← Tilbake til C++ Academy