Vergelijkingstabel
Basis voor vergelijking | Character Array | Draad |
---|---|---|
basis- | Tekenarray is een verzameling variabelen, van het gegevenstype van de tekenreeks. | String is class en variabelen van string zijn het object van klasse "string". |
Syntaxis | char array_name [size]; | string string_name; |
Indexeren | Een individueel teken in een tekenreeks kan worden benaderd door de index in matrix. | In string kan het specifieke karakter worden benaderd door de functie "string_name.charAt (index)". |
Data type | Een tekenarray definieert geen datatype. | Een string definieert een datatype in C ++. |
operators | Operators in C ++ kunnen niet worden toegepast op karakterarray. | U kunt de standaard C ++ -operator op de string toepassen. |
Grens | Array-grenzen kunnen gemakkelijk worden overschreden. | Grenzen worden niet overschreden. |
Toegang | Snelle toegang. | Trage toegang. |
Definitie van Character Array
Een karakterarray is een verzameling variabelen van het "char" -datatype; het kan een eendimensionale array of een tweedimensionale array zijn. Het wordt ook "null-terminated string" genoemd. Een tekenreeks is een reeks tekens die wordt opgeslagen in opeenvolgende geheugenadressen. In een karakterarray kan een bepaald karakter worden benaderd door zijn index. Een "Null-teken" beëindigt de tekenreeks ".
Laten we een voorbeeld nemen van karakterarray: -
char name [] = {'A', 'j', 'a', 'y', '\ 0'}; of char name [] = "Ajay";
Hier is "char" een tekengegevenstype, "naam" is een variabelenaam van de tekenreeks. Ik had twee manieren getoond om de karakterarray te initialiseren. In de eerste methode wordt de null expliciet genoemd en in de tweede methode voegt de compiler automatisch de null in.
Het einde van de string is altijd een nul karakter; het is het afsluitende karakter van de karakterreeks. Een tekenserie is geen ingebouwd gegevenstype; we maken karakterarray door het te declareren. U kunt standaardoperators niet toepassen op een tekenarray. Om te werken op karakterarray zijn er enkele ingebouwde functies zoals, (strlen (), strlwr (), strupr (), strcat ()). Omdat de standaardoperators niet op een tekenreeks kunnen worden toegepast, kunnen ze niet aan een uitdrukking deelnemen.
De tekenaanwijzer naar een tekenreeks kan ook worden gemaakt.
Laten we het begrijpen met een voorbeeld.
char s1 [] = "Hallo"; char s2 [] = "Sir"; s1 = s1 + s2; // foutmeldingen kunnen niet worden toegepast s2 = s1; // fout Karakter pointer char * s = "Morning"; char * p; p = s; // uitvoert
In het bovenstaande voorbeeld hadden we twee karakterarray s1, s2 en twee karakterwijzers s en p verklaard. Tekenarray s1 en s2 zijn geïnitialiseerd, we kunnen zien dat noch de operator voor optellen (+) noch de operator voor toewijzingen werkt aan de tekenreeks. Maar een tekenaanwijzer kan worden toegewezen aan een andere tekenaanwijzer.
Onthoud dat zodra de tekenarray is geïnitialiseerd, deze niet opnieuw kan worden geïnitialiseerd naar een andere reeks tekens. De toegang tot een tekenreeks of een door nul getermineerde reeks is snel in vergelijking met tekenreeks in C ++.
Definitie van String
Een string is geen ingebouwd gegevenstype van C ++. Het is een klasse-object van het type "string". Net als bij C ++ is het maken van een klasse hetzelfde als het maken van een "type". De klasse "string" is een onderdeel van de C ++ -bibliotheek. Het bevat de verzameling karakter- of karakterarray als geheel. Er zijn drie redenen achter de ontwikkeling van een standaard stringklasse.
- Ten eerste is "consistentie", de karakterarrays zijn geen gegevenstypes op zich.
- Ten tweede is "gemak", je kunt geen standaard operatoren op een karakterarray gebruiken.
- Derde is "veiligheid", array-grenzen worden gemakkelijk overschreden.
Laten we strings begrijpen met een voorbeeld.
string s1; s1 = "Hallo"; string s2 ("Goedemorgen"); string s3 = "Hennery"; string s4;
In de bovenstaande verklaring worden vier stringvariabelen of objecten (s1, s2, s3, s4) gedeclareerd. In bovenstaande verklaring had ik drie manieren getoond om de string te initialiseren. De string s1 wordt gedeclareerd en vervolgens afzonderlijk geïnitialiseerd. De string s2 wordt geïnitialiseerd door de constructor van klasse "String". De tekenreeks s3 wordt geïnitialiseerd op het moment van de declaratie als het normale gegevenstype. We kunnen de standaardoperator toepassen op de stringvariabelen.
s4 = s1; // een stringobject toewijzen aan een andere s4 = s1 + s2; // twee tekenreeksen toevoegen en het resultaat opslaan in de derde tekenreeks als (s3> s2) // twee tekenreeksen s5 (s1) worden vergeleken; een nieuw stringobject maken met een bestaand stringobject
In de bovenstaande code worden verschillende operatoren op een string toegepast en worden verschillende bewerkingen uitgevoerd. De eerste opdracht kopieert een stringobject naar een ander stringobject. In de tweede instructie worden twee tekenreeksen samengevoegd en opgeslagen in een derde tekenreeks. In de derde verklaring worden twee reeksen vergeleken. In de vierde instructie wordt een nieuw stringobject gemaakt met het reeds bestaande stringobject.
Toegang tot de string is traag in vergelijking met een tekenarray of een door nul afgesloten string.
Belangrijkste verschillen tussen tekenreeks en reeks
- Een karakterarray is een verzameling variabelen met een karakterdatatype. String is een klasse die wordt geïnstantieerd om tekenreeksen te declareren.
- Met behulp van de indexwaarde hebt u toegang tot een teken uit een tekenreeks. Aan de andere kant, als u toegang wilt tot een bepaald karakter in een string, kunt u dit benaderen met de functie string's_name.charAt (index).
- Omdat een array geen datatype is, is een karakter evenmin een datatype. Aan de andere kant, String is een class-act als een referentietype en daarom kan worden gezegd String is een gegevenstype.
- U kunt geen operator op een tekenarray toepassen, terwijl u operators op String kunt toepassen.
- Het zijn van een array van array-tekens heeft een vaste lengte en de grenzen ervan kunnen gemakkelijk worden overschreden. Waar String geen grenzen heeft.
- Array-elementen worden opgeslagen op een aangrenzende geheugenlocatie, vandaar dat ze sneller kunnen worden gebruikt dan de stringvariabele.
Conclusie:
Onvermogen om te werken met karakterarray verhoogde de ontwikkeling van standaard stringklasse.