Siruri de caractere în C ++ și matrice de caractere
Cu linii lucrăm în aproape fiecare dintre programul nostru și această lecție. Mai precis, cu constante șir - o secvență de caractere în ghilimele. de multe ori am avut de a afișa anumite informații. De exemplu:
Textul în ghilimele este o constantă șir de caractere. Ghilimelele sunt utilizate pentru a determina începutul și sfârșitul unei constante șir și o parte din ea nu este.
Deci, primul: în C ++ pentru stocarea siruri de caractere folosind matrice. Aceasta este aceeași matrice așa cum am discutat deja în articolul despre matrice în C ++, dar acestea nu stochează date numerice, și caracterul. Vă puteți imagina caracterele din matrice în serie în celule de memorie adiacente - fiecare stochează un simbol de celule și ocupă un octet. Un octet se datorează faptului că fiecare element al șirului de caractere este de tip char. Ultimul caracter al fiecărei linii este un simbol \ 0 (caracterul nul). De exemplu:
Textul în sine, inclusiv spațiu, este format din 11 caractere. În cazul în care ultima celulă este ca. (Punct), nu un caracter nul \ 0 - compilator nu mai este o linie. Și noi trebuie să lucrăm cu acest set de caractere ar fi ca de obicei cu matrice - scrie pe fiecare celulă separat și afișate caracter cu caracter (folosind bucla):
#include
using namespace std;
int main ()
setlocale (LC_ALL, "rus");
pentru (int i = 0; i <12; i++) Declară un rând în așa fel - a crea o serie de char, dimensiuni între paranteze pătrate este opțional (contorizează compilator), operatorul = și scrie textul dorit în ghilimele duble. Aceasta este, inițializeze o matrice de constantă șir: int main () char str [] = "Once Upon a Dog"; // '\ 0' este implicit cout < Prescrierea caracterul nul nu este necesară. Acesta este prezent implicit și acest lucru se adaugă la fiecare șir constantă în mod automat. Astfel, în ciuda faptului că vom vedea 11 de caractere pe linie, dimensiunea matrice este de 12, ca \ 0 caractere, și ocupă, de asemenea, un octet de memorie. El ia ultima celulă a șirului de caractere. După cum puteți vedea, linia de ieșire de pe ecran este suficient să-i adreseze după nume: cout < Vreau să vă atrag atenția asupra diferenței dintre o constantă caracter (ghilimele simple -. „F“ „@“) (. „F“ în ghilimele duble „@“) dintr-un șir de caractere constantă. Pentru primul, compilator C ++ este alocat un singur octet pentru stocarea în memorie. Pentru caracterul înregistrat în ghilimele, doi octeți vor fi alocate memoria - pentru sine și pentru simbolul zero (adăugat de compilator). Ce se întâmplă dacă linia va cere utilizatorului cu tastatura? În acest caz, este necesar să se declare o matrice de tip char, indicând dimensiunile suficient pentru stocarea caracterelor de intrare, inclusiv \ 0. Nu uita că caracterul nul. Dacă aveți nevoie pentru a stoca 3 caractere în matrice, dimensiunea acesteia ar trebui să fie una mai mare - adică 4. using namespace std; Vorbeste despre punerea liniile de la tastatura în detaliu. Faptul că există unele probleme să fie conștienți de faptul că trebuie să învețe și să se ocupe. Programul următor nu este tot ceea ce linie buna la intrarea așa cum ne dorim: #include int main () char citat [128] = ""; cout <<"Ваша любимая цитата из мультфильма "Винни Пух": "; Această problemă este rezolvată pur și simplu. În C ++, există funcții get () și getline (). pe care le putem folosi cu cin. Ele sunt similare, dar getline mai frecvent utilizate (). În acest articol, nu vom lua în considerare diferența dintre ele. Completati programul nostru de intrare cu getline (): int main () char citat [128] = ""; cout <<"Ваша любимая цитата из мультфильма "Винни Пух": \n";
cout <
cout <
Din fericire, C ++ are un mod mult mai convenabil pentru a inițializa și pentru a accesa Tablourile de caractere - siruri de caractere. Pentru a face acest lucru, ultimul caracter al șirului trebuie să fie un caracter nul \ 0. El este cel care face ca șirul de caractere setat pentru a lucra cu care este mult mai ușor decât cu o serie de caractere.
#include
using namespace std;
setlocale (LC_ALL, "rus");
Folosind ghilimele goale de inițializare, vom atribui o valoare fiecărui element de matrice \ 0. Astfel, linia va fi curățată de „gunoi“ de alte programe. Chiar dacă utilizatorul introduce un nume care conține mai puține caractere după numele este un \ 0. Acest lucru va evita greșelile inutile. În amintirea acestei linii ar arata astfel:
Apropo, dacă presupunem suprascrie 11-lea celula de matrice - str [11] = „\ 0“;
și afișa o matrice de pe ecran, vom vedea doar purecodecpp în ciuda faptului că în celulele 12, 13, 14 de caractere au fost stocate. caracter Nul va juca un rol important în aducerea pe ecran, și tot ce nu este el prezentat.
using namespace std;
setlocale (LC_ALL, "rus");
cin >> citat;
cout <
Nu te obosi încă despre ce intrare prin CIN trebuie să fie efectuate în latină. Despre modul în care să se introducă în mod corespunzător alfabetul chirilic vor fi discutate într-un articol separat. Aici puteți vedea că citatul am introdus, dar de ieșire pe ecran, vom vedea doar primul cuvânt. Acest lucru se datorează faptului că nu putem introduce un caracter nul de la tastatura, dar percepe spațiu cin, NEWLINE sau fila, ca la sfârșitul liniei. Aceasta este, în acest caz, Cin citit doar primul cuvânt, virgulă și a adăugat marchează în mod automat la sfârșitul liniei. Restul intrărilor plasate în coada de așteptare de intrare.
#include
using namespace std;
setlocale (LC_ALL, "rus");
cin.getline (citat, 128); // a trecut la numele funcției de matrice și dimensiunea acesteia
cout <
Puteți vedea că am indicat între paranteze pentru funcția de două argumente - în ceea ce este considerat un simbol matrice (nume de matrice) și dimensiunea matrice - o linie de 11. Rezultatul ne convine - totul afișat corect. cin.getline () citește un rând întreg în matrice, inclusiv spațiile și tab-uri până la o apăsând pe Enter sau până când dimensiunea matrice este depășită. newline în matrice nu vor fi salvate și va fi înlocuit cu un caracter nul.articole similare