C pentru incepatori

C ++ pentru incepatori

3.4.2. clasa string

După cum tocmai am văzut, utilizarea de tip șir built-in-predispuse la erori și nu foarte confortabil, datorită faptului că acesta este pus în aplicare la un nivel prea scăzut. Prin urmare, destul de comună pentru a dezvolta propria clasă sau clase pentru a reprezenta tipul string - aproape fiecare companie, departament sau proiect în parte a avut propria sa linie de implementare. Dar, ce să spun, în cele două ediții anterioare ale acestei cărți, am făcut același lucru! Acest lucru a dat naștere la probleme de compatibilitate și de portabilitate a programului. Implementarea standardului clasa șir biblioteca standard C ++ a fost destinat să pună capăt acestei invenții biciclete.
Să încercăm să specifice un set minim de operațiuni, care trebuie să aibă un șir de clasă:

String clasa C ++ standard de bibliotecă oferă toate aceste operații (și multe altele, după cum vom vedea în capitolul 6). În această secțiune, vom învăța cum să folosească operațiile de bază ale acestei clase.
Pentru a utiliza obiectele de clasă șir, trebuie să includeți fișierul antet corespunzător:

Aici este o probă de linie din secțiunea anterioară, o reprezentare a obiectului șir și inițializa un șir de caractere:

Lungimea șir returnează funcția de membru dimensiune () (lungime nu include caracterul nul de încheiere).

A doua linie de definire a specifica un șir gol:

Cum știm dacă un șir de caractere este gol? Desigur, puteți compara cu o lungime 0:

Cu toate acestea, există goale metodă specială () returnează true pentru un șir gol și fals pentru non-gol:

constructor inițializează un obiect formular al treilea tip string este un alt obiect de același tip:

string ST3 inițializate linie st. Cum putem să ne asigurăm că aceste linii sunt la fel? Noi folosim operatorul de comparație (==):

Cum de a copia o linie la alta? Cu ajutorul unui operator de atribuire obișnuită:

Pentru concatenare este folosit operatorul plus (+), sau o atribuire operație plus (+ =). Lăsați cele două linii sunt:

Putem obține un al treilea șir format din concatenarea primele două, după cum urmează:

Dacă vrem să adăugați s2 la sfârșitul s1, vom scrie:

operațiune plus poate înlănțui obiectele de clasă șir de caractere, nu numai între ele, ci și cu siruri de caractere de tip încorporat. Puteți rescrie exemplul de mai sus, astfel încât caracterele speciale și semne de punctuație prezentate built-in de tip, și cuvinte semnificative - obiecte de șir de clasă:

Aceste expresii funcționează, deoarece compilatorul știe cum să se transforme în mod automat tipul de obiecte încorporate în obiectele șir de clasă. Atribuirea este posibil și simplu de obiect string încorporat:

Transformata inversă, cu toate acestea, nu funcționează. Încercarea de a efectua următoarea inițializare built-in linie de tip va cauza o eroare de compilator:

Pentru a realiza această transformare, trebuie să invocați în mod explicit funcția de membru cu un nume c_str oarecum ciudat ():

c_str () returnează un pointer la un tablou de caractere care conține șir de șir în forma în care ar fi fost în tip șir încorporat.
Exemplul de mai sus inițializarea pointer char * str nu este încă în întregime corectă. c_str () returnează un pointer la matrice constantă pentru a preveni posibilitatea modificării directe a conținutului obiectului prin indicatorul de tip

(În secțiunea următoare vom descrie cuvântul cheie const). Versiunea corectă a inițializarea este după cum urmează:

Caracterele individuale ale tipului de obiect: string, precum și built-in de tip, pot fi accesate folosind operatorul. Subscript Aici, de exemplu, o bucată de cod înlocuiește toate subliniază punctul:


Asta e tot ce am vrut să spunem despre clasa șir acum. De fapt, această clasă are o mulțime de caracteristici interesante și capabilități. De exemplu, exemplul anterior este, de asemenea, pusă în aplicare prin apelarea unei funcții unice înlocui ():

înlocuiți () - unul dintre algoritmii generice, pe care i-am întâlnit în secțiunea 2.8 și care va investiga în detaliu în capitolul 12. Această caracteristică se execută variază de la început () pentru a termina (), care returnează un pointer la începutul și sfârșitul șirului, și înlocuiește elementele egal cu al treilea parametru său, a patra.

Exercitarea 3.12

Găsiți eroarea în următoarele afirmații:

Exercitarea 3.13

Explicați diferența în comportamentul dintre următoarele afirmații ale buclei:

Exercitarea 3.14

Având în vedere două programe echivalente semantic. Prima folosește un tip de șir încorporat, al doilea - șirul de clasă:

Ce fac aceste programe?
Se pare că a doua implementare se realizează în două ori mai rapid decât prima. V-ati asteptat un astfel de rezultat? Cum îți explici?

Exercitarea 3.15

Ați putea face nimic pentru a îmbunătăți sau adăuga la un set de operațiuni șir de clasă menționate în ultima secțiune? Explicați propunerea dvs.

articole similare