String (datamaskin)

En streng i informatikk er en sekvens av tegn med en forhåndsbestemt rekkefølge. Sekvenser av andre typer data kalles vektorer eller, på engelsk, arrays .

Funksjoner

Den kan være sammensatt av byte når det gjelder strenger med ASCII- koding eller av ord for Unicode -kodinger .

Ofte avsluttes sekvensen av data som en streng består av med et spesialtegn kalt NULL (som i C-språket ) som tjener til å indikere slutten av strengen, selv om det er forskjellige representasjonsmetoder, hvorav noen bruker en annen terminator eller de er avhengige av andre systemer for å bestemme lengden (for eksempel et datum som inneholder lengden på strengen lagret separat).

I mange programmeringsspråk, som Java eller C # , er strengen, av sikkerhetsmessige årsaker, et objekt som ikke kan endres (i Java kan den til og med ikke utvides ). Dette betyr at hver gang en ny verdi tilordnes til en streng (sammenkobling, fjerning eller tillegg av tegn), blir det faktisk opprettet nye strenger.

For eksempel, i C ++, setningen

streng a = "abc" + "def" ;

det skaper faktisk 4 strenger: strengen som representerer en , den som representerer "abc" , den som representerer "def" og til slutt den som skal lagre den midlertidige verdien "abcdef" . Nettopp av denne grunn gir språk som Java og C # andre objekter, som StringBuffer eller StringBuilder som tillater operasjoner på strenger som er raskere og rimeligere med tanke på minnebruk.

Datatype "streng"

En strengdatatype er en datatype basert på ideen om en formell streng. Strenger er en så viktig og nyttig datatype at de er en del av nesten alle programmeringsspråk . På noen språk er bare primitive typer tilgjengelige og på andre som sammensatte typer.

Mens formelle strenger kan ha en vilkårlig (men endelig) lengde, er strenger i programmeringsspråk begrenset i lengde. Generelt er det to kategorier av strengdatatyper: strenger med fast lengde , som har en fast maksimal lengde, og strenger med variabel lengde , hvis lengde kan endres med spesifikke instruksjoner. De fleste strenger i moderne programmeringsspråk har variabel lengde. Til tross for navnet har selv strenger med variabel lengde en lengdegrense; Men generelt avhenger grensen bare av hvor mye minne som er tilgjengelig på datamaskinen.

Strengdatatyper varierer også basert på alfabetet de er definert på. Noen strenger er designet for å fungere på et enkelt prefiks alfabet (som det latinske alfabetet eller ikke som tegnene representert av ASCII -koden ) og andre på et vilkårlig alfabet. For eksempel, i standard C ++- biblioteket , er strenger parametrisert av tegnalfabetet.

Representasjoner

Representasjonen av strengene avhenger hovedsakelig av valget av tegnsettet som skal brukes (som alfabet) og metoden for å kode tegnene (se tegnkoding ). Eldre strengimplementeringer ble designet for å fungere med tegnsett og kodinger definert av ASCII , eller nyere utvidelser som ISO 8859 -serien . Moderne implementeringer bruker ofte det store tegnsettet definert som Unicode sammen med en rekke komplekse kodinger som UTF-8 og UTF-16 .

De fleste strengimplementeringer ligner arrays hvis elementer inneholder koder som tilsvarer tegnene i det tilsvarende tegnsettet . Hovedforskjellen er at i noen kodinger kan tilsvarer et enkelt logisk tegn kreve flere elementer i matrisen. Et eksempel på dette er UTF-8-koding der et enkelt logisk tegn kan ta opptil fire byte. I disse tilfellene er den logiske lengden på strengen forskjellig fra den til matrisen.

Lengden på en streng kan lagres implisitt ved å bruke et spesielt termineringstegn . Dette tegnet er ofte null-tegnet eller NULL med kode null, en konvensjon som brukes og videreføres av det populære C -programmeringsspråket . Lengden på en streng kan også lagres eksplisitt, for eksempel ved å feste et prefiks med en heltallsverdi til strengen, en konvensjon som brukes for eksempel i Pascal . Vær oppmerksom på at i tilfelle av avsluttede strenger, vil avslutningstegnet aldri være tillatt som innholdet i en streng.

Her er et eksempel på en null-terminert (eller null-terminert ) streng lagret i en 10-byte buffer , sammen med dens ASCII-representasjon.

F. R. TIL Nei. K. NUL k Og f w
46 52 41 4E 4B 00 6B 65 66 77

Lengden på strengen er 5 tegn i dette eksemplet, men den opptar 6 byte. Tegnene etter avslutningen (6B 65 66 77, henholdsvis kefw i ASCII) er ikke en del av strengen, de kan være en del av en annen streng som bare avfall.

Den tilsvarende strengen i Pascal:

lengde F. R. TIL Nei. K. k f f w
05 46 52 41 4E 4B 6B 66 66 77

Ved siden av disse vanlige representasjonene er andre mulige.

Bruk av tau (også kalt tungvektsstrenger ) kan gjøre visse operasjoner som innsettinger, slettinger og sammenkoblinger mer effektive. [1]

Algoritmer for strenger

Mange algoritmer har blitt studert for manipulering av strenger som er kjennetegnet ved formål og ved forskjellige kompromissvalg i møte med kontrasterende behov som amplituden til rekkevidden og effektiviteten.

Disse algoritmene er plassert i kategorier som følgende:

De mest avanserte algoritmene for prosessering av strenger bruker ofte forseggjorte formelle mekanismer og komplekse datastrukturer. Disse inkluderer suffikstrer og endelige tilstandsmaskiner .

Stringbehandlingsorienterte språk og verktøy

Strenger er en så mye brukt datatype at de induserer utviklingen av en rekke språk rettet mot å lette behandlingen av strengene mest etterspurt av applikasjoner. Disse inkluderer:

Mange Unix -omfangede verktøy utfører relativt enkle strengmanipulasjoner og kan brukes til å programmere ganske effektive strengbehandlingsalgoritmer . Disse verktøyene kan også behandle ferdige filer og strømmer som strenger.

Nyere skriptspråk , som Perl , Python , Ruby og Tcl , bruker vanlige uttrykk for å lette håndteringen av tekst.

Relaterte elementer