Võrdluskaart
Võrdluse alus | Tähemärk | String |
---|---|---|
Põhiline | Märkide massiiv on muutujate kogum, mida iseloomustab andme tüüp. | String on klass ja stringi muutujad on klassi "string" objektiks. |
Süntaksi | char array_name [suurus]; | string string_name; |
Indekseerimine | Tähemärkide individuaalset sümbolit saab kasutada selle indeksiga massiivis. | Stringis saab konkreetset märki kasutada funktsiooniga "string_name.charAt (index)". |
Andmetüüp | Tähemärk ei määratle andmesidet. | String määratleb C ++ -is andmemahu. |
Operaatorid | C ++ operaatorid ei saa märkide massiivile rakendada. | Stringil võib kasutada tavalist C ++ operaatorit. |
Piir | Array piirid on kergesti ületatavad. | Piirid ei ületa. |
Juurdepääs | Kiire juurdepääs. | Aeglane juurdepääs. |
Tähemärkide määratlus
Tähemärk on “char” -andmetüübi muutujate kogum; see võib olla ühemõõtmeline massiiv või kahemõõtmeline massiiv. Seda nimetatakse ka null-lõpetatud stringiks. Märkide massiiv on järjestikuste mäluaadresside salvestatud tähemärkide jada. Tähemärkides saab konkreetse märgi juurde pääseda selle indeksiga. „Null-märgi” lõpetab märkide massiivi.
Võtame näiteks märkide massiivi: -
char name [] = {'A', 'j', 'a', 'y', '0'; või char nimi [] = "Ajay";
Siin on „char” tähemärgiandmete tüüp, „name” on märkide massiivi muutuja nimi. Ma olin näidanud kahte võimalust, kuidas algata tähemärki. Esimeses meetodis on null sõnaselgelt mainitud ja teises meetodis lisab kompilaator automaatselt null.
Stringi lõpp on alati null; see on märkide massiivi lõpetav märk. Tähemärk ei ole sisseehitatud andmetüüp; me loome seda iseloomustavat märki. Tähemärkidel ei saa kasutada tavalisi operaatoreid. Tähemärkide töötamiseks on mõned sisseehitatud funktsioonid, näiteks (strlen (), strlwr (), strupr (), strcat (). Kuna standardset operaatorit ei saa tähemärki rakendada, ei saa nad mingis väljendis osaleda.
Tähemärkide märgistiku saab luua ka.
Mõelgem selle näitega.
char s1 [] = "Tere"; char s2 [] = "Sir"; s1 = s1 + s2; // veaoperatoreid ei saa rakendada s2 = s1; // viga Märgikursor char * s = "Hommik"; char * p; p = s; // täidab
Ülaltoodud näites olime kuulutanud välja kaks märkide massiivi s1, s2 ja kaks tähemärki s ja p. Sümbolite s1 ja s2 vormindatakse, näeme, et ei lisaoperaator (+) ega loovutamise operaator ei täida märkide massiivi. Kuid märki saab määrata teisele tähemärgile.
Pidage meeles, et kui sümbolivorm on initsialiseeritud, ei saa seda uuesti vormindada teise märgistikku. Juurdepääs sümbolile või null-otsaga stringile on kiire, võrreldes stringiga C ++.
Stringi määratlus
String ei ole sisseehitatud C ++-tüüpi andmetüüp. See on “string” tüüpi objekt. Nagu C ++, on klassi loomine just nagu „tüübi“ loomine. Klass “string” on osa C ++ raamatukogust. See omab kogu tähemärkide või märkide massiivi. Standardstringiklasside väljatöötamisel on kolm põhjust.
- Esiteks on „järjepidevus”, märkide massiivid ei ole iseenesest andmeliigid.
- Teiseks on "mugavus", sa ei saa kasutada tavapäraseid operaatoreid sümbolivahemikus.
- Kolmandaks on „ohutus“, massiivi piirid on kergesti ületatud.
Mõistagem näiteks stringi.
string s1; s1 = "Tere"; string s2 ("Tere hommikust"); string s3 = "Hennery"; string s4;
Ülaltoodud deklaratsioonis deklareeritakse neli stringi muutujat või objekte (s1, s2, s3, s4). Ülaltoodud deklaratsioonis olin näidanud kolm stringi vormindamise võimalust. String s1 on deklareeritud ja seejärel eraldi vormindatud. Stringi s2 vormindab klassi “String” konstruktor. String s3 vormindatakse deklaratsiooni esitamise ajal tavalise andmetüübina. Standardset operaatorit võime rakendada stringi muutujatele.
s4 = s1; // ühe stringiobjekti määramine teistele s4 = s1 + s2; // kahe stringi lisamine ja tulemuse salvestamine kolmandasse stringi, kui (s3> s2) // kahe stringi stringi s5 (s1) võrdlemine; uue stringobjekti loomine olemasoleva stringobjekti abil
Ülaltoodud koodis rakendatakse stringile mitmesuguseid operaatoreid ja teostatakse erinevaid operatsioone. Esimene avaldus kopeerib ühe stringiobjekti teisele stringobjektile. Teises avalduses on kaks stringi kokku pandud ja salvestatud kolmandasse stringi. Kolmandas avalduses võrreldakse kahte stringi. Neljandas avalduses luuakse juba olemasoleva stringobjekti abil uus stringiobjekt.
Juurdepääs stringile on märkide massi või null-lõpetatud stringiga võrreldes aeglane.
Tähemärkide ja stringide vahelised peamised erinevused
- Tähemärk on muutujate kogum, mis on iseloomulike andmetüüpidega. String on klass, mis on reastatud stringide deklareerimiseks.
- Indeksiväärtuse abil saate sisestada märki massiivist. Teisest küljest, kui soovite kasutada stringi teatud märki, pääsete sellele juurde funktsiooni stringi_nimi.charAt (indeks) abil.
- Kuna massiiv ei ole andmeside tüüp, siis ei ole märgis ka andmeside. Teisest küljest, String on klass, mis toimib võrdlusviisina, seega võib öelda, et String on andme tüüp.
- Teil ei ole võimalik ühtegi operaatorit märkide massiivis rakendada, samas kui saate rakendada operaatorit Stringis.
- Massiivi iseloomu massiiviks olemine on fikseeritud pikkusega ja selle piire saab kergesti ületada. Kui Stringil ei ole piire.
- Array elemendid salvestatakse külgnevasse mälukohta, mis võimaldab juurdepääsu kiiremini kui stringi muutuja.
Järeldus:
Iseloomuliku töövõime puudumine tõstis standardstringiklassi arengut.