Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi znakovým poľom a reťazcom

C ++ podporuje aj pole znakov a reťazec, pretože C ++ má značné výhody pri používaní obidvoch. Ale neschopnosť pracovať na charaktere matice zvyšuje vývoj reťazca triedy. Obe pole znakov a reťazec obsahujú poradie znakov. Základným rozdielom medzi znakovým poľom a reťazcom je však to, že "pole znakov" nemožno prevádzkovať so štandardnými operátormi, zatiaľ čo objekt "string" môže byť prevádzkovaný so štandardnými operátormi. Pozrime sa na ďalšie rozdiely medzi znakovým poľom a reťazcom.

Porovnávacia tabuľka

Základ pre porovnanieZnakové polepovrázok
základnéZnakové pole je kolekcia premenných typu údajov typu znakov.String je trieda a premenné reťazca sú objektom triedy "string".
syntaxchar array_name [veľkosť];string string_name;
indexovanieJeden znak v matici znakov je prístupný indexom v poli.V reťazci môže byť daný znak prístupný funkciou "string_name.charAt (index)".
Dátový typZnakové pole neurčuje typ dát.Reťazec definuje dátový typ v C ++.
operátoriOperátori v jazyku C ++ sa nemôžu aplikovať na pole znakov.Na reťazec môžete použiť štandardný operátor C ++.
hraniceHranice polí sú ľahko prekročené.Hranice nebudú prekročené.
prístupRýchly prístup.Pomalý prístup.


Definícia poľa znakov

Znakové pole je kolekcia premenných typu "char"; môže to byť jednorozmerné pole alebo dvojrozmerné pole. Nazýva sa tiež reťazec ukončený nulou. Znakové pole je sekvencia znakov, ktoré sú uložené v nasledujúcich adresách pamäte. V matici znakov môže mať daný znak prístup k jeho indexu. "Nulový znak" ukončí pole znakov ".

Zoberme si príklad znakového poľa: -

 char názov [] = {'A', 'j', 'a', 'y', '\ 0'}; alebo char meno [] = "Ajay"; 

Tu je "char" znak typ dát, "meno" je názov premennej matice znakov. Ukázal som dva spôsoby inicializácie poľa znakov. V prvej metóde sa explicitne spomína null a v druhej metóde kompilátor automaticky vloží nulu.

Koniec reťazca je vždy nulový znak; je to ukončujúci znak poľa znakov. Znakové pole nie je vstavaný typ údajov; vytvoríme pole znakov tým, že ho vyhlasujeme. Nemôžete použiť štandardné operátory v poli znakov. Ak chcete pracovať s maticovým poľom, existujú niektoré vstavané funkcie, ako sú (strlen (), strlwr (), strupr (), strcat ()). Keďže štandardné operátory nemožno použiť na pole znakov, nemôžu sa zúčastniť žiadneho výrazu.

Môžete tiež vytvoriť ukazovateľ znakov do poľa znakov.

Chápeme to s príkladom.

 char s1 [] = "Ahoj"; char s2 [] = "Sir"; s1 = s1 + s2; // chyba operátorov nemožno použiť s2 = s1; // error znak ukazovateľ char * s = "ráno"; char * p; p = s; // Vykoná 

Vo vyššie uvedenom príklade sme deklarovali dva znakové pole s1, s2 a dva znakové ukazovatele s a p. Znakové pole s1 a s2 sa inicializujú, takže môžeme vidieť, že operátor prírastku (+) ani operátor priradenia nefunguje na poli znakov. Ukazovateľ znakov však môže byť priradený inému ukazovateľu znakov.

Pamätajte, že po inicializácii matice znakov nie je možné znova inicializovať inú sadu znakov. Prístup do poľa znakov alebo null ukončený reťazec je rýchly v porovnaní s reťazcom v jazyku C ++.

Definícia reťazca

Reťazec nie je vstavaný dátový typ C ++. Je to objekt triedy typu "string". Rovnako ako v C ++ vytváranie triedy je rovnako ako vytvorenie "typu". Trieda "reťazec" je súčasťou knižnice C ++. Obsahuje súbor znakových alebo znakových polí ako celku. Existujú tri príčiny vývoja štandardnej triedy reťazcov.

  • Prvým je "konzistencia", pole znakov nie sú dátové typy samy osebe.
  • Druhé je "pohodlie", nemôžete používať štandardné operátory v poli znakov.
  • Po tretie je to "bezpečnosť", hranice poľa sú ľahko prekročené.

Chápeme struny s príkladom.

 reťazec s1; s1 = "Ahoj"; reťazec s2 ("Dobré ráno"); reťazec 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 následne inicializovaný samostatne. Reťazec s2 inicializuje konštruktor triedy "String". Reťazec s3 sa inicializuje v čase deklarovania ako normálny dátový typ. Na reťazcové premenné môžeme použiť štandardný operátor.

 s4 = s1; // priradenie jedného reťazecového objektu inému s4 = s1 + s2; // pridaním dvoch reťazcov a uložením výsledku do tretieho reťazca, ak (s3> s2) // porovnáme dva reťazce s5 (s1); vytvorenie nového reťazecového objektu pomocou existujúceho reťazecového objektu 

Vo vyššie uvedenom kóde sa na reťazec používajú rôzne operátory a vykonávajú sa rôzne operácie. Prvé vyhlásenie kopíruje jeden reťazec objekt na iný reťazec objekt. V druhom vyhlásení sú dva reťazce spojené a uložené v treťom reťazci. V treťom vyhlásení sa porovnávajú dva reťazce. Vo štvrtom vyhlásení sa vytvorí nový reťazecový objekt pomocou už existujúceho reťazecového objektu.

Prístup k reťazci je pomalý v porovnaní s poľom znakov alebo null ukončený reťazec.

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

  1. Znakové pole je kolekcia premenných, ktoré majú charakter dátového typu. String je trieda, ktorá je inštancovaná na deklarovanie reťazcov.
  2. Pomocou indexovej hodnoty môžete získať 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 ho získať pomocou funkcie string's_name.charAt (index).
  3. Keďže pole nie je dátovým typom, podobný znak nie je aj dátový typ. Na druhej strane, String je trieda ako referenčný typ, preto sa dá povedať, že String je dátový typ.
  4. Nemôžete použiť žiadneho operátora na pole znakov, zatiaľ čo operátorov môžete použiť na reťazec.
  5. Byť pole poľa matice má pevnú dĺžku a jeho hranice môžu byť ľahko prekročené. Kde reťazec nemá žiadne hranice.
  6. Elementy poľa sú uložené v susediacej pamäti, takže je možné ich pristupovať rýchlejšie ako reťazcové premenné.

záver:

Neschopnosť pracovať na poli znakov zvýšila vývoj štandardnej triedy reťazcov.

Top