Rozdiel medzi poľom znakov a reťazcom

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 4 Smieť 2024
Anonim
7.2.2 Array vs String comparison
Video: 7.2.2 Array vs String comparison

Obsah


C ++ podporuje obidva, Znakové pole a reťazec, pretože C ++ má značné výhody pri ich používaní. Neschopnosť pracovať na poli znakov však zvyšuje vývoj reťazcov triedy. Pole znakov aj reťazec obsahujú postupnosť znakov. Základný rozdiel medzi znakovým poľom a reťazcom je však v tom, že „znakové pole“ nie je možné prevádzkovať so štandardnými operátormi, zatiaľ čo „reťazcové“ objekty sa môžu prevádzkovať so štandardnými operátormi. Poďme študovať ďalšie rozdiely medzi súborom znakov a reťazcom.

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnanieCharacter Arraypovrázok
základnéZnakové pole je zbierka premenných typu dátových znakov.String je trieda a premenné reťazca sú predmetom triedy „string“.
syntaxchar array_name;string string_name;
indexovanieK jednotlivému znaku v poli znakov je možné pristupovať pomocou jeho indexu v poli.V reťazci je ku konkrétnemu znaku prístupná funkcia „string_name.charAt (index)“.
Dátový typPole znakov nedefinuje typ údajov.Reťazec definuje dátový typ v C ++.
operátoriOperátori v jazyku C ++ nemožno použiť na znakové pole.Na reťazec môžete použiť štandardného operátora C ++.
hraniceHranice poľa sa ľahko prekročia.Hranice sa neprekročia.
prístupRýchly prístup.Pomalý prístup.


Definícia súboru znakov


Znakové pole je zbierka premenných „char“ údajového typu; môže to byť jednorozmerné pole alebo dvojrozmerné pole. Nazýva sa tiež „null zakončený reťazec“. Pole znakov je postupnosť znakov, ktoré sú uložené na následných adresách pamäte. V poli znakov je konkrétny znak prístupný prostredníctvom svojho indexu. „Nulový znak“ ukončí pole znakov “.

Vezmime príklad poľa znakov: -

char name = {A, j, a, y, 0}; alebo char name = "Ajay";

V tomto prípade „char“ je typom znakových údajov, „name“ je variabilný názov poľa znakov. Ukázal som dva spôsoby inicializácie poľa znakov. V prvej metóde je explicitne uvedená hodnota null a v druhej metóde kompilátor automaticky vloží hodnotu null.


Koniec reťazca je vždy nulový znak; je to ukončovací znak poľa znakov. Znakové pole nie je zabudovaným typom údajov; Vytvárame pole znakov jeho deklarovaním. Na znakové pole nemôžete použiť štandardných operátorov. Ak chcete pracovať na poli znakov, existujú niektoré vstavané funkcie, ako napríklad (strlen (), strlwr (), strupr (), strcat ()). Pretože štandardných operátorov nie je možné použiť na znakové pole, nemôžu sa zúčastniť žiadneho výrazu.

Môže sa tiež vytvoriť znakový ukazovateľ na znakové pole.

Pochopme to príkladom.

char s1 = "Ahoj"; char s2 = "pane"; s1 = s1 + s2; // operátory chýb nie je možné použiť s2 = s1; // error Ukazovateľ znakov char * s = "Ráno"; char * p; p = s; // Vykoná

Vo vyššie uvedenom príklade sme deklarovali dve znakové pole s1, s2 a dva znakové ukazovatele s a p. Znakové pole s1 a s2 sú inicializované, vidíme, že ani operátor sčítania (+), ani operátor priradenia nepracujú na poli znakov. Ukazovateľ znakov však môžete priradiť inému ukazovateľovi znakov.

Pamätajte, že po inicializácii poľa znakov sa už nemôže inicializovať do inej sady znakov. Prístup do poľa znakov alebo nulového ukončeného reťazca je rýchly v porovnaní s reťazcom v C ++.

Definícia reťazca

Reťazec nie je vstavaný typ údajov C ++. Je to objekt triedy typu „string“. Rovnako ako v C ++ je vytvorenie triedy rovnako ako vytvorenie „typu“. Trieda „reťazec“ je súčasťou knižnice C ++. Obsahuje celú množinu znakov alebo súboru znakov. Za vývojom štandardnej triedy strún sú tri dôvody.

  • najprv je „konzistentnosť“, znakové polia nie sú samy o sebe typmi údajov.
  • druhý je „pohodlie“, nemôžete použiť štandardných operátorov na poli znakov.
  • tretina je „bezpečnosť“, hranice poľa sa ľahko prekročia.

Poďme pochopiť reťazce s príkladom.

reťazec s1; s1 = "Ahoj"; reťazec s2 („Dobré ráno“); string s3 = "Hennery"; reťazec s4;

Vo vyššie uvedenom vyhlásení sú deklarované štyri reťazcové premenné alebo objekty (s1, s2, s3, s4). Vo vyššie uvedenom vyhlásení som ukázal tri spôsoby inicializácie reťazca. Reťazec s1 je deklarovaný a potom osobitne inicializovaný. Reťazec s2 je inicializovaný konštruktorom triedy „String“. Reťazec s3 je inicializovaný v čase jeho deklarácie ako normálny typ údajov. Na reťazcové premenné môžeme použiť štandardného operátora.

s4 = s1; // priradenie jedného reťazca objektu k druhému s4 = s1 + s2; // pridanie dvoch reťazcov a uloženie výsledku do tretieho reťazca, ak (s3> s2) // porovnanie dvoch reťazcov s5 (s1); vytvorenie nového reťazca pomocou existujúceho reťazca

Vo vyššie uvedenom kóde sa na reťazec aplikujú rôzne operátory a vykonávajú sa rôzne operácie. Prvý príkaz skopíruje jeden reťazcový objekt na iný reťazcový objekt. V druhom príkaze sú dva reťazce zreťazené a uložené v treťom reťazci. V treťom výroku sa porovnávajú dva reťazce. Vo štvrtom príkaze sa nový objekt reťazca vytvorí pomocou už existujúceho objektu reťazca.

Prístup k reťazcu je pomalý v porovnaní so znakovým poľom alebo reťazcom ukončeným nulou.

Kľúčové rozdiely medzi poľom znakov a reťazcom

  1. Znakové pole je zbierka premenných, ktoré majú dátový typ znakov. String je trieda, ktorá je vytvorená pre deklarovanie reťazcov.
  2. Použitím hodnoty indexu získate prístup k znaku z poľa znakov. Na druhej strane, ak chcete získať prístup k určitému znaku v reťazci, môžete k nemu získať prístup pomocou funkčného reťazca'sname_char.t (index).
  3. Pretože pole nie je typom údajov, znak nie je ani typom údajov. Na druhej strane, String je trieda, ktorá funguje ako referenčný typ, preto možno povedať, že String je dátový typ.
  4. Na znakové pole nemôžete použiť žiadneho operátora, zatiaľ čo na reťazec môžete použiť operátory.
  5. Byť pole znakov poľa má pevnú dĺžku a jeho hranice sa dajú ľahko prekročiť. Kde String nemá žiadne hranice.
  6. Prvky poľa sa ukladajú do súvislého umiestnenia pamäte, ku ktorému je možné pristupovať rýchlejšie ako reťazcová premenná.

záver:

Neschopnosť pracovať na poli znakov zvýšila vývoj štandardnej triedy strún.