Strengalgoritmer
Søk og splitt effektivt
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/rfindreturnerer posisjoner ellernpos.starts_with/ends_withkontrollerer prefikser og suffikser.- Deling, trimming og tokenisering gir delviews uten allokering.
- Delviews deler kildens levetid. Vær oppmerksom på hengende views.
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
- Hvorfor string_view
- Opprette views
- Fallgruver og levetider
- Strengalgoritmer