Postat de cheie în c / c ++
Caracterele de caractere stochează informații cum ar fi numele fișierelor, titlurile cărților, numele angajaților și alte combinații de caractere. Majoritatea programelor C ++ utilizează extensiv caracterele de caractere. În continuare, veți afla că în siruri de caractere C ++ sunt stocate în tipachar matrice, care se încheie caracterul NULL (sau ASCII 0). În această lecție, șirurile de caractere sunt discutate mai detaliat. Veți învăța cum să stocați și să procesați șiruri de caractere și cum să utilizați funcțiile bibliotecii runtime care manipulează șirurile de caractere. Până la sfârșitul acestei lecții, veți învăța următoarele concepte de bază:
Programele C ++ stochează șirurile de caractere ca o matrice de tip char. Majoritatea programelor folosesc extensiv caracterele de caractere. Experimentați cu fiecare program prezentat în această lecție pentru a vă familiariza cu șirurile de caractere. Veți constata că lucrul cu șiruri de caractere este similar cu lucrul cu matricele descrise în lecția 16.
Programatorii din C ++ folosesc cu strictețe caracterele de caractere pentru a stoca numele de utilizator, numele fișierelor și alte informații despre caractere.
Fig. 17.1. C ++ tratează un șir de caractere ca o matrice de tip char.
Diferența principală dintre șirurile de caractere și alte tipuri de matrice este ca C ++ indică ultimul element al matrice, După cum știți deja, un program de C ++ reprezintă sfârșitul unui șir de caractere de un caracter NULL, care este portretizat ca un caracter special „\ 0“ în C ++. Când atribuiți simboluri ale unui șir de caractere, trebuie să pui un caracter NULL ( „\ 0“) după ultimul caracter din șirul. De exemplu, următorul program ALPHABET. CPP atribuie litere de la A la Z ale alfabetului variabil, folosind buclă for. Programul adaugă apoi caracterul NULL la această variabilă și îl transmite cu cout.
caractere alfabet [34]; // 33 litere plus NULL caractere;
int index;
pentru (litera = 'A', index = 0; litera <= ‘Я’;
litera ++, index ++) alfabet [index] = litera;
alfabet [index] = NULL;
cout <<«Буквы » <
După cum puteți vedea, programul atribuie un șir nul șirului pentru a indica ultimul caracter al liniei:
Când fluxul de ieșire cout emite un șir de caractere, acesta imprimă unul câte unul șirul de caractere până când întâlnește caracterul NULL. Pe scurt, caracterul NULL indică programul până la ultimul caracter din șir.
Rețineți buclă pentru care apare în programul anterior. După cum puteți vedea, bucla inițializează și mărește două variabile (litere și index). Când buclă for inițializează sau mărește mai multe variabile, separați operațiile cu o virgulă (virgulă este, de asemenea, o instrucțiune C ++):
pentru (litera = 'A', index = 0; litera <= ‘Я’; letter++, index++)
C ++ adaugă automat NULL la constantele string
Toate programele pe care le-ați creat utilizează constante șir de caractere, închise în ghilimele duble, după cum se arată mai jos:
"Aceasta este o constantă string"
Atunci când se creează o constantă a unui șir de caractere, compilatorul C ++ adaugă automat caracterul NULL, așa cum se arată în Fig. 17.2.
Fig. 17.2. Compilatorul C ++ adaugă automat caracterul NULL la constantele string.
Atunci când programul afișează constantele șir de caractere cu ajutorul cout flux de ieșire, utilizează cout caracterul NULL (care compilatorul adaugă la bara) pentru a determina ieșirea ultimului caracter.
Utilizând caracterul NULL
Dacă utilizați constante șir închise în ghilimele duble, compilatorul C ++ adaugă automat caracterul NULL. Majoritatea funcțiilor C ++ utilizează caracterul NULL pentru a determina ultimul caracter al șirului.
Următorul program LOOPNULL.CPP modifică ușor programul anterior, utilizând buclă pentru a tipări conținutul șirului:
caractere alfabet [34]; // 33 caractere plus caractere NULL;
int index;
pentru (litera = 'A', index = 0; litera <= ‘Я’; letter++, index++) alphabet[index] = letter;
alfabet [index] = NULL;
pentru (index = 0; alfabet [index] 1 = NULL; index ++) cout <
După cum puteți vedea, buclă for examinează caracterele șir o dată. Dacă caracterul nu este NULL (nu ultimul caracter al șirului), bucla scoate un caracter, incrementează indexul și procesul continuă.
Cum "A" diferă de "A"
Când se analizează programele în C ++, puteți găsi caractere cuprinse în ghilimele simple (de exemplu, "A") și caracterele incluse în
Fig. 17.3. Modul în care compilatorul C ++ stochează caracterul constant 'A', iar șirul constant 'A'.
ghilimele duble ("A"). Caracterul din interiorul citatelor singulare este o caracteristică constantă. Compilatorul C ++ alocă doar un octet de memorie pentru stocarea caracterului constant. Cu toate acestea, caracterul în citate dublă este o constantă șir - caracterul specificat și caracterul NULL (adăugat de compilator). Astfel, compilatorul va aloca doi octeți pentru șirul de caractere. Figura 17.3 ilustrează modul în care compilatorul C ++ stochează caracterul constant 'A', iar constanta stringului 'A'.
INITIALIZAREA LINIEI SIMBOLULUI
titlu caractere [64] = "Învățați să programați în C ++";
char title [] = "Învățați să programați în C ++";
titlu caractere [64] = "Învățați să programați în C ++";
caracterele de caractere [64] = "Caractere de caractere";
cout <<«Книга: » <
Unele programe prezentate în restul cărții vor inițializa șirurile de caractere într-un mod similar. Luați timp pentru a experimenta acest program, schimbând simbolurile atribuite fiecărui rând.
TRANSFERUL LINIILOR LA FUNCȚIE
Transmiterea unui șir de caractere unei funcții este similară cu trecerea oricărui matrice ca parametru. În interiorul funcției, trebuie doar să specificați tipul matricei (char) și parantezele din stânga și din dreapta ale matricei. Nu este necesar să specificați mărimea șirului. De exemplu, următorul program SHOW_STR.CPP utilizează funcția show_ string pentru a afișa pe ecran un șir de caractere:
void show_string (șir de caractere [])
cout <
show_string ("Bună ziua, C ++!");
show_string ("Învăț să programez în C ++");
>
După cum puteți vedea, funcția show_string tratează parametrul șir de caractere ca o matrice:
void show_string (șir de caractere [])
Deoarece caracterul NULL indică sfârșitul unui șir, funcția nu necesită un parametru care să specifice numărul de elemente din matrice. În schimb, funcția poate determina ultimul element prin găsirea pur și simplu a caracterului NULL în matrice.
După cum știți deja, funcțiile C ++ folosesc adesea caracterul NULL pentru a determina sfârșitul unui șir. Următoarea STR_LEN.CPP creează o funcție numită STRING_LENGTH, care este în căutarea pentru un caracter NULL în șir pentru a determina numărul de caractere conținute în șir. Apoi, funcția utilizează operatorul de retur pentru a returna lungimea șirului funcției de apelare. Programul transferă mai multe șiruri de caractere diferite ale funcției, afișând lungimea fiecăruia pe ecran:
int string_length (șir de caractere [])
int i;
pentru (i = 0; șir []! = '\ 0'; i ++); // Nu face nimic, dar du-te la
// returnul următorului caracter (i); Lungimea șirului
>
char title [] = "Învățați să programați în C ++";
caractere de caractere [] = "Caractere de caractere";
cout <<«Строка » <
După cum puteți vedea, funcția începe cu primul caracter al șirului (element 0) și apoi explorează fiecare element până când întâlnește NULL. Având în vedere programele din C ++, veți întâlni o serie de funcții care se uită similar prin șiruri de caractere în căutarea unui caracter NULL.
AVANTAJE DE CE CE NULL PREZINTĂ ASCII 0
După cum știți deja, caracterul NULL este ASCII caracterul 0. În lecția 7 vă că studiat C ++ utilizează o valoare de la 0 pentru a reprezenta false. Deci, din moment ce caracterul NULL este 0, programele dvs. pot simplifica multe dintre operațiile de buclă. De exemplu, multe funcții scanează caracterele de caractere de caractere după caracter în căutarea NULL. Următorul pentru bucla ilustrează modul în care programul poate căuta NULL într-un șir:
pentru (index = 0; șir [index]! = NULL; index ++)
Deoarece caracterul NULL este 0, multe programe simplifică buclele care caută NULL, după cum se arată mai jos:
pentru (index = 0; șir [index]; index ++);
În acest caz, în timp ce caracterul conținut în șir [index] nu este NULL (0 sau fals), buclă continuă.
UTILIZAREA FUNCȚIILOR STRICT ALE ETAPEI DE IMPLEMENTARE A BIBLIOTECA
În lecția 11, ați aflat că majoritatea compilatoarelor C ++ oferă un set extins de funcții, numit biblioteca runtime. Având în vedere biblioteca runtime, veți găsi că aceasta conține multe funcții diferite care manipulează șiruri de caractere. De exemplu, funcția strupr convertește un șir de caractere într-un șir de majuscule. În mod similar, funcția strlen returnează numărul de caractere din șir. Cele mai multe biblioteci de execuție oferă funcții chiar și care vă permit să răsfoiți șiruri de caractere în căutarea unui caracter specific. De exemplu, următorul program STRUPR.CPP ilustrează utilizarea funcțiilor strupr și strlwr ale bibliotecii runtime:
#include
// funcții strupr și strlwr
void principal (void)
char title [] = "Învățați să programați în C ++";
caractere de caractere [] = "Caractere de caractere";
cout <<«Верхний регистр: » <
Utilizarea funcțiilor de bibliotecă care manipulează șiruri de caractere vă poate economisi timpul necesar programării. Selectați timpul pentru a imprima o copie a fișierului header STRING.H pentru a determina funcțiile de manipulare a șirului care sunt acceptate de biblioteca dvs. de compilatoare.
Trebuie să jucați după reguli
După cum știți deja, majoritatea funcțiilor care manipulează șirurile se bazează pe caracterul NULL ca sfârșitul șirului. Dacă programele dvs. atribuie șirurilor simbolurilor, ar trebui să vă asigurați că ele adaugă caracterul NULL ca ultimul caracter al șirului. Dacă programele dvs. nu utilizează corespunzător NULL, atunci funcțiile care se bazează pe caracterul NULL vor fi confundate.