String - aceasta

În memoria de reprezentare

Unele limbaje de programare impun restricții privind durata maximă a liniei, dar în cele mai multe astfel de restricții nu sunt limbi. Atunci când se utilizează Unicode, fiecare tip șir de caractere poate necesita doua sau chiar patru octeți pentru prezentare.

Principalele probleme în reprezentarea mașinii unui tip șir:

  • Liniile pot fi suficient dimensiune substanțială (până la câteva zeci de megabytes);
  • Timp diferite dimensiuni - există dificultăți cu adăugarea și eliminarea simbolurilor.

În reprezentarea liniilor, există două abordări fundamental diferite în memoria calculatorului.

Prezentarea unui tablou de caractere

În această linie de abordare reprezintă o matrice de caractere; în care mărimea șirului este stocată într-un (serviciu) zonă separată. Prin titluri de limbaj Pascal. în cazul în care această metodă a fost pusă în aplicare în primul rând, această metodă se numește șiruri Pascal.

întruchipare ușor optimizat al acestei metode este t. N. Formatul c-adr u (din limba engleză. adresa aliniat caractere + numărul nesemnat), utilizat în Forte. Spre deosebire de siruri de caractere Pascal, aici dimensiunea matrice nu este stocată împreună cu datele șir, și face parte dintr-un pointer șir de caractere.

avantaje

  • program de la un moment dat „știe“ despre mărimea șirului, și funcționarea de caractere adăugate la copierea final și primirea de dimensiunea liniei se realizează destul de repede;
  • șir poate conține orice date;
  • eventual, la nivel de program pentru a monitoriza ieșirea liniei de frontieră cu procesarea acesteia;
  • puteți efectua rapid operațiuni de forma „a lua caracterul N-lea de la capătul liniei.“

deficiențe

  • probleme cu depozitarea și manipularea caracterelor de orice lungime;
  • crește costul de depozitare siruri de caractere - valoarea „lungimea liniei“ are loc, de asemenea, în cazul unui număr mare de rânduri de dimensiuni mici, poate crește în mod semnificativ cerințele algoritmului în memorie;
  • limitând dimensiunea maximă a șirului. În limbaje de programare moderne, această restricție este mai degrabă teoretică, deoarece este, de obicei, de mărimea unui șir de caractere este stocat în câmpul de 32 de biți, care dă dimensiunea maximă a șirului la 4,294,967,295 bytes (4 GB);.

„Octet final“ metoda

A doua metodă este de a utiliza „byte finală“. Una valori posibile simboluri alfabet (de obicei, un cod de caractere 0) este selectat ca fiind sfârșitul caracteristicii liniei și șirul este stocată ca o secvență de octeți de la început până la sfârșit. Există un sistem în care, ca semn al sfârșitul liniei este nu este folosit un simbol de la 0, iar octetul 0xFF (255) sau un simbol de cod „$“.

Metoda are trei nume - ASCIIZ (caractere în octet terminat ASCII la zero), C-siruri (metoda cea mai utilizată a fost exact în C) și de manipulare șir Metoda C.

avantaje

  • nici aeriene suplimentare pe linie (cu excepția octeți final);
  • posibilitatea de a prezenta linie, fără a crea un tip de date separat;
  • nu există nici o limită privind dimensiunea maximă a șirului;
  • utilizarea economică a memoriei;
  • ușurința de a obține șir sufix;
  • posibil să se utilizeze o dimensiune de caractere alfabet variabilă (de exemplu, UTF-8).

deficiențe

  • Operațiuni care produc o lungime de execuție lungă și concatenare;
  • lipsa de control asupra lucrurile merg dincolo de o linie, în caz de deteriorare a octetului posterior al prejudiciu potențial zone mari de memorie, ceea ce poate duce la consecințe imprevizibile - pierderea de date, programe, și chiar prăbușirea întregului sistem;
  • incapacitatea de a utiliza octetul caracter definitiv ca element de linie.

Folosind ambele metode

În limbi, cum ar fi, de exemplu, Oberon. line este plasat într-o matrice de o anumită lungime de caractere, cu capătul său desemnat printr-un caracter nul. În mod implicit, întreaga matrice este umplut cu caractere nule. Această metodă vă permite să combinați multe dintre avantajele ambelor abordări, și pentru a evita majoritatea deficiențelor lor.

Punerea în aplicare limbaje de programare

  • În prima limbaje de programare nu a avut un șir de tip; programator însuși a trebuit să construiască funcții pentru lucrul cu șiruri de unul sau de alt tip.
  • In C utilizat C manipulare șir cu control manual complet al programatorului.
  • În șir Pascal standard, apare ca o matrice de 256 de octeți; primul octet stocate linie de lungime, corpul său este păstrat în restul. Astfel, lungimea liniei nu poate depăși 255 de simboluri. În Borland Pascal 7.0 a apărut, de asemenea, linia de „a la C“ - în mod evident, datorită faptului că numărul de platforme suportate incluse Windows.
  • În Object Pascal și linia STL este „cutia neagră“, în care alocarea / eliberarea memoriei este automat - fără programator. Când creați o memorie de linie este alocată în mod automat; de îndată ce linia nu va fi nici o memorie de referință înapoi la sistem. Avantajul acestei metode este faptul că programatorul nu cred că a liniilor de lucru. Pe de altă parte, programatorul nu are suficient control asupra funcționării programelor în zonele critice la viteza; linii, de asemenea, dificil de transmisie realizate, cum ar fi un parametru în DLL. Object Pascal, de asemenea, se asigură în mod automat că a fost un simbol cu ​​codul de la sfârșitul șirului 0. Prin urmare, în cazul în care funcția necesită la intrare șir C de manipulare. pentru a converti pur și simplu trebuie să scrie PAnsiChar (strokovaya_peremennaya) sau PWideChar (strokovaya_peremennaya) (pentru Pascal), .c_str () variabilă (pentru Builder / STL).
  • În C # și alte limbi străine cu șir de caractere de colectare a gunoiului este imuabil; Dacă trebuie să modificați șirul, este creat un alt obiect. Această metodă este lentă și consumă o mulțime de memorie temporară, dar se potrivește bine cu conceptul de colectare a gunoiului. Avantajul acestei metode este că atribuirea are loc rapid și fără dublarea liniilor. De asemenea, există un control manual asupra construcției de linii (de exemplu, un Java prin StringBuffer clasă.) - aceasta reduce cantitatea de precipitați și eliberarea de memorie și, în consecință, crește viteza.
operații simple cu coarde
  • obținerea unui caracter de poziție (indice) - în cele mai multe limbi este o operație banală;
  • concatenare (conexiune) linii.
tranzacţiile cu derivate
  • Obținerea indicilor de subșir pentru începutul și sfârșitul anului;
  • verificarea apariție a unui șir la altul (de căutare sub-string);
  • verificarea liniilor de coincidență (inclusiv sau majuscule);
  • obținerea lungimii unei linii;
  • Înlocuirea subșir.
Operațiuni în interpretarea ca liste de șiruri
  • convoluția;
  • afișa o listă la alta;
  • lista de criterii de filtrare.
operații mai complexe
  • găsirea nadstroki minimă care cuprinde toate aceste linii;
  • căutare în două șiruri de linii coincizând secvențe (problema de plagiat).
Posibile probleme pentru siruri de caractere în limbaj natural
  • comparând apropierea liniilor menționate anterior printr-un criteriu predeterminat;
  • Definirea limbii și codificare de text, pe baza probabilității de simboluri și silabe.

Reprezentarea unui șir de caractere

Până de curând, un caracter este întotdeauna codat de un octet (8 biți binar, și codificarea este aplicat la 7 biți per caracter), care vă permite să reprezinte 256 (128 cu șapte biți de codificare) valori posibile. Cu toate acestea, pentru o reprezentare de înaltă calitate a alfabetelor mai multor simboluri limbi (documente cu mai multe limbi, caractere de imprimare - .. Mai multe tipuri de citate liniuță de mai multe tipuri de spații și să scrie texte în limbi hieroglifice. - Chineză japoneze și coreene) 256 de caractere nu este suficient. Există mai multe metode pentru a rezolva această problemă:

Vezi ce „String“, în alte dicționare:

Tip de date - (un termen găsit, de asemenea, un fel de date), conceptul de bază al teoriei programării. Tipul de date definește un set de valori, un set de operațiuni care pot fi aplicate la aceste valori, și, probabil, o modalitate de a pune în aplicare o valoare de depozitare și ... ... Wikipedia

un tip primitiv - Primitive (built-in, de bază) tipul de tipul de date furnizate de limbajul de programare construit ca o unitate de bază a limbii. În funcție de limba și punerea sa în aplicare, un set de aceste tipuri pot varia foarte mult. Acesta este determinat de ... ... Wikipedia

Boolean - Ca motive tehnice Bool redirecționează aici. Despre Bool poate fi citit aici: stdbool.h. Logic, boolean (Ing. Boolean sau logică de tip de date) tipul de date este un tip de date primitiv în informatică, care poate dura două posibile ... Wikipedia

Integer (tip de date) - un tip de date întreg întreg (. Engleză un Integer), în informatică este una dintre cele mai simple și cele mai comune tipuri de date în limbajele de programare. Acesta este utilizat pentru a reprezenta numere întregi. Setul de numere de acest tip este ... ... Wikipedia

Cel mai mare tip - (tip superior), în teorie de tip, adesea menționată ca un top sau un simbol „fix“ (⊤), de tip universal, adică, un tip care conține orice obiect posibil în tipul corect de sistem. Cel mai mare tip este uneori denumit ... ... Wikipedia

Algebrice tip de date - în teoria programării oricărui tip ale căror valori sunt valorile unor alte tipuri de „învelite“ de designeri de tip algebric. Cu alte cuvinte, tipul de date algebrică este un set de constructori de tip, fiecare dintre care este ... ... Wikipedia

Setul (tipul de date) - Acest termen, există alte utilizări, a se vedea setul (valoare) .. Tipul de set și structura de date în informatică, este o implementare a unui set de obiect matematic. Tipul de set de date poate stoca un număr limitat de valori ... ... Wikipedia

Boolean - Un tip logic (boolean) de date este un tip de date primitiv în calculator care poate lua două valori posibile, uneori numit adevăr și falsitate. Acesta este prezent în marea majoritate a limbilor de programare ca o entitate independentă sau ... Wikipedia