I datalogi er en tegnstreng både konceptuelt en ordnet række af tegn og fysisk en ordnet række af kodeenheder ( kodeenhed ). String er en form for data i mange edb-sprog . Den engelske oversættelse er streng .
I pionerernes tid forvekslede vi ofte karakterstreng og bytestreng, hvilket er forvirrende i dag, når vi ikke ønsker at begrænse os til 255 tegn. I forlængelse her taler vi om en binær streng for at beskrive en række af bytes .
Nogle sprog foretrækker at håndtere strenge fra 16-bit enheder.
I Unicode er datatypen "Unicode-streng" en ordnet rækkefølge af "kodeenheder".
De fleste programmeringssprog tilbyder en klasse eller type beregnet til repræsentation og manipulation af strenge.
Sprog | Datatype | Beskrivelse |
---|---|---|
Python | str, unicode | Er blevet ændret med Python 3.0. |
Java | java.lang.String | Fra deres oprindelse har Java-strenge været Unicode- strenge . |
VS | char* og char[] | C-sproget har aldrig kendt en ægte strengtype. Tegnstrenge simuleres almindeligvis af en markør til en sekvens af enkeltbyte-tegn, der slutter med en nulbyte. Nogle biblioteker findes til at håndtere strenge, især for at overvinde begrænsningerne ved single-byte-strenge. |
C ++ | char*og char[], basic_string<>( stringeller wstring) | Den skabeloner C ++ definere klassen std::string(single-byte character baserede kæder). Imidlertid er det ofte nødvendigt at manipulere "C-stilstrenge" for at kunne bruge standard C ++ - biblioteket . |
C ++ 2011 | char*og char[], char16_t, char32_t, basic_string<>( stringeller wstring) | Udviklingen af C ++ 2011 gør det muligt at overveje behandlingen af Unicode-tegnstrenge. |
VS # | string, StringogStringBuilder | streng er et alias til Class String (System.String), så typestreng matcher ikke en reference (pointer). Det er også muligt at bruge char * og char [], men dette indebærer brug af det "usikre" nøgleord. StringBuilder anbefales i tilfælde, hvor koden sammenkæder meget. |
Pascal | String | Strengdatatypen har eksisteret i lang tid i Pascal. Siden udseendet af Delphi er der imidlertid tilføjet flere typer strenge: AnsiString, UnicodeString og WideString. |
Mål C | char * og NSString | NSString bruges til at repræsentere en uforanderlig unicode-tegnstreng. char * giver dig mulighed for at administrere en bytebuffer. |
Javascript | var |
Mindst ECMAScript version 3 og 5 erklærer begge eksplicit en streng som en samling af usignerede 16-bit heltal, som når de repræsenterer tekst er enheder af UTF-16-koden. |
Der findes forskellige teknikker til at repræsentere strenge ved hjælp af bytes. De kræver generelt at være i stand til at repræsentere hvert tegn (kodning), men også for at markere slutningen af strengen.
Slutningen af strengen kan være kendt ved at bruge et tegn på slutningen af en streng (normalt 0, men $ er også blevet brugt i MS-DOS ) eller ved samtidig at gemme antallet af tegn eller antallet af bytes i strengen.
Hvert tegn er repræsenteret af et antal bytes, som afhænger af tegnkodningen . Afhængig af den anvendte kodning kan der være grænser for sæt af tilgængelige tegn, algoritmerne til browsingstrenge, interoperabilitet og / eller ydeevne. Især kan kodninger baseret på enkeltbyte-tegn som udvidet ASCII være mere effektive, men begrænsende og / eller begrænsende i en sammenhæng med internationalisering og / eller interoperabilitet. Andre kodninger, såsom UTF-8 , har andre egenskaber.
I en computerhukommelse , den hukommelse adresse er for det første tegn kendt. At afgrænse slutningen af strengen, eller den sluttede med en strengtermineringstegn (binært nul i C-sprog , og dette henvises til ASCIIZ for at indikere " sluttede med en z ero ") eller antallet af tegn gemt parallelt ( BASIC , Pascal , PL / I ). På nogle objektorienterede sprog behøver den interne kodning af strengen ikke at være kendt ( indkapsling ).
|
|
Den escapesekvens kan også være til stede.
Karakter repræsenteret | PÅ | m | é | l | jeg | e | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
UTF16-BE NFC | 0041 | 006d | 00e9 | 006c | 0069 | 0065 | |||||||||||||||||
UTF16-BE NFD | 0041 | 006d | 0065 | 0301 | 006c | 0069 | 0065 | ||||||||||||||||
UTF16-BE NFD | PÅ | m | e | '' | l | jeg | e |
Som et eksempel beskriver tabellen [3] nedenfor kodningen af strengen 「日本語 版 Wikipedia」 (Wikipedia japansk version) med ISO-2022-JP og Unicode- konventionerne .
Eksempel i ISO 2022Eksempelillustrationstabellen er formateret som følger:
Karakter repræsenteret | 日 | 本 | 語 | 版 | W | jeg | k | jeg | s | e | d | jeg | på | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
機能 区 点 行列 |
JIS X 0208 を 指示 |
38-92 | 43-60 | 24-76 | 40-39 | ASCII を 指示 |
07/05 | 06/09 | 06/11 | 06/09 | 07/00 | 05/06 | 04/06 | 06/09 | 06/01 | ||||||||
byte | 01/11 | 04/02 | 02/04 | 06/04 | 07/12 | 04/11 | 05/12 | 08/03 | 06/12 | 08/04 | 07/04 | 01/11 | 08/02 | 02/04 | 07/05 | 06/09 | 06/11 | 06/09 | 07/00 | 05/06 | 04/06 | 06/09 | 06/01 |
ESC | $ | B | F | | | K | \ | 8 | l | H | G | ESC | ( | B | W | jeg | k | jeg | s | e | d | jeg | på |
Bemærk: den første flugtsekvens er muligvis ikke nødvendig, når teksten begynder med et af de 96 tegn i den amerikanske standard (ascii).
Unicode-eksempelKodningen af strengen 「日本語 版 Wikipedia」 kan udføres i 16-bit enheder.
Karakter repræsenteret | 日 | 本 | 語 | 版 | W | jeg | k | jeg | s | e | d | jeg | på | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
UTF16-BE | 65e5 | 672c | 8a9e | 7248 | 0057 | 0069 | 006b | 0069 | 0070 | 0065 | 0064 | 0069 | 0061 |
Repræsentationen af en tegnstreng i et programmeringssprog varierer fra system til system.
For at repræsentere en streng af tegn i en tegnstrøm (som en tekstfil , især i kildekoden ) er det generelt nødvendigt at markere starten og slutningen af strengen og eventuelt bruge escape-sekvenser .
For at repræsentere en tegnstreng er det normalt omgivet af et par specialtegn, ofte dobbelt anførselstegn. For eksempel vil "Wikipedia" blive bemærket for at betegne strengen, der består af de ni tegn W , i , k , i , p , é , d , i og a .
Eksempler:
For at kunne bruge disse specialtegn er der konventioner. Med Pascal-sproget fordobler vi det enkelte citat for at kunne introducere det i tegnstrengen:
Andre konventioner bruger en flugtkarakter; den omvendte skråstreg er den mest anvendte karakter. For Java, C, C ++ (og andre) sprog skriver vi \ "for at introducere et dobbelt citat i en tegnstreng:
Mange algoritmer er en del af den nyeste teknik til behandling af strenge, som hver kan have forskellige former. Nogle eksempler på kategorier af sådanne algoritmer:
En passende overvejelse af strengene fra udvikleren kræver generelt kendskab til de forskellige karakterbrug. De operationer, der synes åbenlyse på et alfabet på 26 karakterer, er ikke nødvendigvis indlysende med det sæt tegn, der er anerkendt af Unicode. For en applikation, der sigter mod at blive distribueret på globalt plan, gøres det vanskeligt ved de mulige specificiteter ved skrivningen, der er knyttet til bestemte kulturer: eksistensen af tegnækvivalens, størrelse på asiatiske tegn, skriveretning, skrivevariant for det samme bogstav afhængigt af især position. Især en operation, der er så enkel som at tælle tegn, skal muligvis specificeres for at vide, om den skal bruges til at tælle kodeenheder, kodepunkter eller grafemaer.
Imidlertid gør biblioteker til visse programmeringssprog det muligt delvis at imødekomme disse behov.
Visse begrænsninger af visse programmeringssprog får udviklere til at skrive fejl eller nogle testere for kun at validere den korrekte funktion på et begrænset antal tegn. Især engelsktalende udviklere har en dårlig vane med kun at udføre et antal tests begrænset til ASCII-tegn.