Rozdíl mezi znakovou sadou a řetězcem

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 6 Smět 2024
Anonim
Rozdíl mezi znakovou sadou a řetězcem - Technologie
Rozdíl mezi znakovou sadou a řetězcem - Technologie

Obsah


C ++ podporuje oba, Znakové pole a řetězec, protože C ++ má značné výhody při používání obou. Neschopnost pracovat na poli postav však zvyšuje vývoj řetězců třídy. Pole znaků i řetězec obsahují posloupnost znaků. Zásadní rozdíl mezi znakovým polem a řetězcem je v tom, že „znakové pole“ nelze provozovat se standardními operátory, zatímco „řetězcové“ objekty lze provozovat se standardními operátory. Podívejme se na další rozdíly mezi znakovým polem a řetězcem.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníCharacter ArrayTětiva
ZákladníZnakové pole je kolekce proměnných typu datových typů.Řetězec je třída a proměnné řetězce jsou předmětem třídy "řetězec".
Syntaxchar array_name;string string_name;
IndexováníK jednotlivému znaku v poli znaků lze přistupovat pomocí jeho indexu v poli.V řetězci může být konkrétní znak zpřístupněn funkcí "název_ řetězce.charAt (index)".
Datový typPole znaků nedefinuje datový typ.Řetězec definuje datový typ v C ++.
OperátořiOperátory v jazyce C ++ nelze použít na znakové pole.Na řetězec můžete použít standardní operátor C ++.
HraniceHranice pole se snadno překračují.Hranice nebudou překročeny.
PřístupRychlý přístup.Pomalý přístup.


Definice znakové sady


Znakové pole je kolekce proměnných datového typu „char“; může to být jednorozměrné pole nebo dvourozměrné pole. Nazývá se také „null zakončený řetězec“. Pole znaků je posloupnost znaků uložených na po sobě jdoucích adresách paměti. V poli znaků lze ke konkrétnímu znaku přistupovat prostřednictvím jeho indexu. Pole „Null character“ ukončí pole znaků.

Vezměme si příklad znakového pole: -

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

Zde „char“ je datový typ znaku, „name“ je název proměnné pole znaků. Ukázala jsem dva způsoby inicializace pole znaků. V první metodě je explicitně uvedena null a ve druhé metodě kompilátor automaticky vloží null.

Konec řetězce je vždy nulový znak; je to ukončovací znak pole znaků. Pole znaků není vestavěný datový typ; vytváříme pole znaků deklarováním. Na znakové pole nelze použít standardní operátory. Chcete-li pracovat na poli znaků, existují některé vestavěné funkce, jako jsou (strlen (), strlwr (), strupr (), strcat ()). Protože standardní operátory nelze použít na znakové pole, nemohou se účastnit žádného výrazu.


Lze také vytvořit ukazatel znaků na pole znaků.

Rozumíme tomu s příkladem.

char s1 = "Ahoj"; char s2 = "Pane"; s1 = s1 + s2; // nelze použít operátory chyb s2 = s1; // error Ukazatel znaků char * s = "Ráno"; char * p; p = s; // provede

Ve výše uvedeném příkladu jsme deklarovali dvě znakové pole s1, s2 a dva znakové ukazatele s a p. Znakové pole s1 a s2 jsou inicializovány, můžeme vidět, že ani operátor sčítání (+), ani operátor přiřazení nepracují na znakovém poli. Ukazatel znaků však lze přiřadit jinému ukazateli znaků.

Pamatujte, že jakmile je pole znaků inicializováno, nemůže být znovu inicializováno do jiné sady znaků. Přístup k poli znaků nebo nulově ukončenému řetězci je rychlý ve srovnání s řetězcem v C ++.

Definice řetězce

Řetězec není vestavěný datový typ C ++. Je to objekt třídy typu „string“. Stejně jako v C ++ je vytváření třídy stejně jako vytváření „typu“. Třída „řetězec“ je součástí knihovny C ++. Drží sadu znaků nebo pole znaků jako celek. Za vývojem standardní třídy řetězců stojí tři důvody.

  • za prvé je „konzistence“, znaková pole nejsou sama o sobě datovými typy.
  • Druhý je „pohodlí“, nemůžete použít standardní operátory na poli znaků.
  • Třetí je „bezpečnost“, hranice pole se snadno překračují.

Pojďme pochopit řetězce s příkladem.

řetězec s1; s1 = "Ahoj"; řetězec s2 („Dobré ráno“); string s3 = "Hennery"; řetězec s4;

Ve výše uvedené deklaraci jsou deklarovány čtyři řetězcové proměnné nebo objekty (s1, s2, s3, s4). Ve výše uvedeném prohlášení jsem ukázal tři způsoby inicializace řetězce. Řetězec s1 je deklarován a poté samostatně inicializován. Řetězec s2 je inicializován konstruktorem třídy „String“. Řetězec s3 je inicializován v době jeho deklarace jako normální datový typ. Můžeme použít standardní operátor na proměnné řetězce.

s4 = s1; // přiřazení jednoho řetězce objektu jinému s4 = s1 + s2; // přidání dvou řetězců a uložení výsledku do třetího řetězce, pokud (s3> s2) // porovnání dvou řetězců s5 (s1); vytvoření nového řetězce objektu pomocí existujícího řetězce objektu

Ve výše uvedeném kódu jsou na řetězec aplikovány různé operátory a jsou prováděny různé operace. První příkaz zkopíruje jeden řetězcový objekt na jiný řetězcový objekt. Ve druhém příkazu jsou dva řetězce zřetězeny a uloženy do třetího řetězce. Ve třetím příkazu jsou porovnány dva řetězce. Ve čtvrtém příkazu je vytvořen nový objekt řetězce pomocí již existujícího objektu řetězce.

Přístup k řetězci je pomalý ve srovnání s řetězcem znaků nebo řetězcem ukončeným nulou.

Klíčové rozdíly mezi řadou znaků a řetězcem

  1. Znakové pole je kolekce proměnných, které mají charakter datového typu. Řetězec je třída, která je instancí pro deklarování řetězců.
  2. Pomocí hodnoty indexu můžete přistupovat k znaku ze znakového pole. Na druhou stranu, pokud chcete získat přístup k určitému znaku v řetězci, můžete k němu přistupovat pomocí funkčního řetězce's_name.charAt (index).
  3. Protože pole není datovým typem, ani znak není datovým typem. Na druhé straně, String je třída, která funguje jako referenční typ, a proto lze říci, že String je datový typ.
  4. Na znakové pole nemůžete použít žádného operátora, zatímco na řetězec můžete použít operátory.
  5. Být znakové pole pole má pevnou délku a jeho hranice mohou být snadno překročeny. Kde String nemá žádné hranice.
  6. Prvky pole jsou uloženy v souvislém umístění paměti, takže k nim lze přistupovat rychleji než řetězcová proměnná.

Závěr:

Neschopnost pracovat na poli znaků zvýšila vývoj standardní třídy řetězců.