Søking og erstatting av tekst

C:
Søking og erstatting av tekst

Hvordan:

C kommer ikke med innebygde funksjoner for direkte å utføre søk og erstatte på strenger. Imidlertid kan du oppnå dette ved å kombinere ulike streng-håndteringsfunksjoner som er tilgjengelige i <string.h> biblioteket sammen med noe tilpasset logikk. Nedenfor er et grunnleggende eksempel på hvordan søke etter en delstreng innenfor en streng og erstatte den. For enkelhets skyld antar dette eksemplet tilstrekkelig bufferstørrelse og håndterer ikke minneallokeringsspørsmål som du bør vurdere i produksjonskode.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void replaceSubstring(char *source, char *sub, char *new_sub) {
    char buffer[1024];
    char *insert_point = &buffer[0];
    const char *tmp = source;
    size_t len_sub = strlen(sub), len_new_sub = strlen(new_sub);
    size_t len_up_to_match;

    while ((tmp = strstr(tmp, sub))) {
        // Kalkuler lengden opp til treffet
        len_up_to_match = tmp - source;
        
        // Kopier delen før treffet
        memcpy(insert_point, source, len_up_to_match);
        insert_point += len_up_to_match;
        
        // Kopier ny delstreng
        memcpy(insert_point, new_sub, len_new_sub);
        insert_point += len_new_sub;
        
        // Flytt forbi treffet i kildestrengen
        tmp += len_sub;
        source = tmp;
    }
    
    // Kopier eventuelle gjenværende deler av kildestrengen
    strcpy(insert_point, source);
    
    // Skriv ut den modifiserte strengen
    printf("Modifisert streng: %s\n", buffer);
}

int main() {
    char sourceStr[] = "Hei, dette er en test. Denne testen er enkel.";
    char sub[] = "test";
    char newSub[] = "eksempel";
    
    replaceSubstring(sourceStr, sub, newSub);
    
    return 0;
}

Eksempel på utdata:

Modifisert streng: Hei, dette er en eksempel. Denne eksemplet er enkel.

Denne koden demonstrerer en enkel tilnærming for å søke etter alle forekomster av en delstreng (sub) i en kildestreng og erstatte dem med en annen delstreng (newSub), ved bruk av strstr-funksjonen for å finne startpunktet for hvert treff. Det er et veldig grunnleggende eksempel som ikke håndterer komplekse scenarioer som for eksempel overlappende delstrenger.

Dypdykk

Tilnærmingen som er brukt i “Hvordan”-delen er grunnleggende, og illustrerer hvordan man kan oppnå tekst søk og erstatning i C uten noen tredjepartsbiblioteker. Historisk sett, på grunn av Cs vekt på lavnivåminnehåndtering og ytelse, inkluderer ikke standardbiblioteket høy-nivå strengmanipuleringsfunksjoner som de som finnes i språk som Python eller JavaScript. Programmerere må manuelt håndtere minne og kombinere ulike strengoperasjoner for å oppnå ønskede resultater, noe som øker kompleksiteten, men gir mer kontroll og effektivitet.

Det er viktig å merke seg at denne manuelle tilnærmingen kan være feilbarlig, spesielt når man håndterer minneallokeringer og bufferstørrelser. Feil håndtering kan føre til bufferoverløp og minneforringelse, noe som gjør koden sårbar for sikkerhetsrisikoer.

I mange praktiske scenarioer, spesielt de som krever kompleks tekstbehandling, er det ofte verdt å vurdere å integrere tredjepartsbiblioteker som PCRE (Perl Compatible Regular Expressions) for regex-basert søk og erstatning, noe som kan forenkle koden og redusere potensialet for feil. I tillegg tilbyr moderne C-standarder og kompilatorer stadig innebygde funksjoner og sikrere alternativer for strengmanipulering, med mål om å motvirke vanlige fallgruver observert i eldre C-kodebaser. Likevel forblir den grunnleggende forståelsen av manuell tekstbehandling en verdifull ferdighet i en programmerers verktøykasse, spesielt for optimalisering av ytelseskritiske applikasjoner.