Lucrul cu șiruri. Clasa de șiruri. Constructori de clasă. Funcțiile assign(), append(), insert(), replace(), erase(), find(), rfind(), compare(), c_str(). Exemple. Funcții de procesare a șirurilor în C
Declararea șirurilor
Un șir în limbajul C este o matrice unidimensională de caractere, ultimul element al căruia este caracterul de sfârșit de linie - zero (un șir terminat cu zero, adică un șir terminat NULL).
Declararea unei variabile de tip șir în limbajul C este posibilă în trei moduri, dintre care două inițializează șirul în momentul declarării.
Prima cale:
Declarații de matrice de caractere (nu uitați să adăugați spațiu pentru nulul final):
Char s;
A doua cale:
Atribuiți valoarea inițială variabilei șir (în acest caz, compilatorul poate calcula însuși lungimea șirului):
Char s = „Exemplu de inițializare șir”;
În dreapta semnului de atribuire este o constantă șir. Un zero ('\0') este adăugat automat la sfârșitul liniei. Constantele șirurilor de caractere sunt plasate într-o clasă de memorie statică.
A treia cale:
Indicație implicită că este utilizată o matrice. În stânga semnului de atribuire este un indicator către simbolul:
Char *s="A doua opțiune de inițializare";
Variabila s va fi un pointer către locația din RAM în care se află constanta șir. O posibilă capcană în această formă de notație este că un indicator către un caracter este adesea denumit șir. Intrarea de mai jos este doar un indicator către un caracter, deoarece nu există spațiu prevăzut pentru șir:
Char *s;
Introducerea unui șir de pe un dispozitiv de intrare standard (tastatură)
Există un set de funcții pentru lucrul cu șiruri. Pentru intrarea de la un dispozitiv de intrare standard (tastatură), funcțiile de bibliotecă din modulul de intrare/ieșire standard sunt cel mai des utilizate: scanfȘi devine.
Pentru a introduce un șir folosind funcția scanf, folosește formatul « %s» , și rețineți că semnul adresei nu este folosit înaintea identificatorului de linie « & » , deoarece o matrice unidimensională este deja reprezentată printr-un pointer către începutul său:
Scanf("%s", s);
Funcţie devine() citește caractere până când ajunge la un caracter newline. Funcția acceptă toate caracterele până la caracterul newline, dar nu îl include. Un zero final ('\0') este adăugat la sfârșitul liniei. Funcţie devine() plasează secvența de caractere citite de la tastatură într-un parametru de tip șir și returnează un pointer către acest șir (dacă operația a avut succes) sau NULL (în cazul unei erori). În exemplul de mai jos, dacă operația se finalizează cu succes, pe ecran vor fi afișate două linii identice:
#include
În treacăt, rețineți că funcția gets este adesea folosită pentru a introduce orice date de la tastatură ca șir în scopul conversiei ulterioare de către funcția sscanf în formatul dorit sau pentru analiza preliminară a datelor de intrare, de exemplu:
#include
Imprimarea șirurilor la ieșirea standard (ecranul monitorului)
Pentru a scoate șiruri către dispozitivul de ieșire standard (ecranul monitorului), puteți utiliza două funcții printfȘi pune. Funcția printf este transmisă „%s” ca format. Comoditatea utilizării acestei funcții este că, pe lângă un șir, puteți afișa imediat date de alte tipuri. Caracteristică Caracteristică pune este că după ce o linie este imprimată, aceasta trece automat la următoarea linie.
Funcții pentru lucrul cu șiruri
Pentru a converti șiruri în limbajul C, este furnizată biblioteca de șiruri. Fiecare funcție are propriul format de înregistrare (prototip).
Cele mai utilizate funcții sunt discutate în acest articol. - citit
Exemplu de programe (listări) care lucrează cu șiruri
În această lecție vom discuta despre șiruri în stil C este posibil să fi văzut deja aceste șiruri pe site-ul nostru sau în orice alt manual. De fapt, șirurile C sunt doar matrice de caractere, dar, cu propriile lor specificități, știm întotdeauna unde se află sfârșitul liniei. În acest articol ne vom uita la mai multe funcții pentru lucrul cu șiruri, de exemplu, tu - copiați, concatenați, obțineți lungimea unui șir.
Ce sunt corzile?
Rețineți că, alături de șirurile de caractere în stil C, care sunt în esență matrice simple, există și literale de șir, cum ar fi acest „literal” . În realitate, atât șirurile, cât și literalele sunt pur și simplu seturi de caractere situate unul lângă altul în memoria computerului. Dar există încă o diferență între matrice și literale: literalele nu pot fi modificate, iar șirurile de caractere pot.
Orice funcție care acceptă un șir în stil C poate accepta și un literal ca parametru. Există, de asemenea, unele entități în C care pot arăta ca șiruri de caractere, când de fapt nu sunt. Vorbesc acum despre caractere, sunt cuprinse între ghilimele simple, iată un exemplu - „a”, după cum puteți vedea, acesta nu este un șir. Un caracter poate fi, într-o anumită locație, să fie atribuit unui șir, dar caracterele nu pot fi procesate ca șir. Dacă vă amintiți, matricele funcționează ca indicatori, așa că dacă treceți un singur caracter într-un șir, acesta va fi considerat o eroare.
Din cele de mai sus, ar fi trebuit să realizezi că șirurile sunt matrice de caractere, iar literalele șiruri sunt cuvinte înconjurate de ghilimele duble. Iată un alt exemplu de literal:
„Acesta este un șir static”
Ai uitat de specificul corzilor, despre care s-a menționat ceva mai sus? Deci, șirurile C trebuie să se termine întotdeauna cu un caracter nul, literal „\0”. Prin urmare, pentru a declara un șir format din 49 de litere, trebuie să rezervați o celulă suplimentară pentru caracterul nul:
Char myString;
După cum puteți vedea din exemplu, lungimea matricei este de 50 de caractere, dintre care 49 va fi o linie și unul, ultimul va fi un caracter nul. Este important să ne amintim că trebuie să existe întotdeauna un caracter nul la sfârșitul liniilor C, la fel cum există un punct la sfârșitul fiecărei propoziții. Deși caracterul nul nu este afișat atunci când este scos șirul, totuși ocupă spațiu în memorie. Deci, din punct de vedere tehnic, într-o matrice de cincizeci de elemente, puteți stoca doar 49 de litere, deoarece ultimul caracter este necesar pentru a termina șirul. În plus, pointerii pot fi folosiți și ca șir. Dacă citiți articolul despre , puteți face așa ceva:
Char *myString; // tip char pointer myString = malloc(sizeof(*myString) * 64); // alocare de memorie
În acest exemplu, am alocat 64 de locații de memorie pentru matricea myString. Pentru a elibera memoria, utilizați funcția free().
Gratuit(myString);
Folosind șiruri
Șirurile sunt utile atunci când trebuie să efectuați diverse operații asupra informațiilor text. De exemplu, dacă doriți ca utilizatorul să introducă un nume într-un program, veți folosi un șir. Utilizarea scanf() pentru a introduce un șir funcționează, dar poate duce la o depășire a memoriei tampon. La urma urmei, șirul de intrare poate fi mai mare decât dimensiunea șirului tampon. Există mai multe modalități de a rezolva această problemă, dar cea mai simplă este să utilizați , care este declarat în fișierul antet
Când citește intrarea de la utilizator, acesta va citi toate caracterele, cu excepția ultimului. După aceea, un terminator zero va fi plasat la sfârșitul liniei de citire. Funcția fgets() va citi caractere până când utilizatorul apasă Enter. Să vedem un exemplu de utilizare a fgets():
#include
Primul parametru pentru fgets() este un șir, al doilea parametru este dimensiunea șirului, iar al treilea parametru este un pointer către fluxul de date de intrare.
Rezultatul programului:
<ВВОД>...
După cum puteți vedea, din rezultatul programului, un caracter de linie nouă - "\n" - a intrat în linia de intrare. Acest lucru s-a întâmplat deoarece fgets() a numărat apăsarea butonului Enter în șirul myString și și-a finalizat munca. Acest lucru înseamnă că poate fi necesar să eliminați manual caracterul nou linie. O modalitate de a face acest lucru este enumerarea personaj cu caracter. Să modificăm programul și să eliminăm caracterul nou linie:
#include
Vă rugăm să rețineți că, dacă șirul de intrare conține mai puțin de 100 de caractere, atunci va fi inclus și un caracter newline în șir. Prin urmare, putem elimina acest personaj folosind forța brută simplă. Am adăugat o buclă la program în care trecem prin caracterele șirului, rândurile 12-19. Și când întâlnim un caracter de nouă linie, îl înlocuim cu un caracter nul, linia 16. Rezultatul programului:
Introduceți o linie lungă: Soarta își lasă amprenta Ați introdus următoarea linie: Soarta își lasă amprenta Pentru a închide această fereastră, faceți clic pe<ВВОД>...
Asta este tot pentru acum. În articolul următor vă voi spune despre funcții speciale pentru lucrul cu șiruri.
P.S.: Tuturor ne place să urmărim diferite înregistrări video, dar uneori se întâmplă să nu fie întotdeauna posibilă redarea unor formate de fișiere video. Deci, puteți rezolva această problemă folosind programul - xilisoft converter ultimate. Puteți converti rapid videoclipuri dintr-un format în altul. În plus, acest program poate converti și fișiere audio și imagini animate.
Standardul modern C++ definește o clasă cu funcții și proprietăți (variabile) pentru organizarea muncii cu șiruri de caractere (în limbajul clasic C nu există șiruri ca atare, există doar matrice de caractere char):
#include
#include#include
Pentru a lucra cu șiruri, trebuie, de asemenea, să conectați un spațiu de nume standard:
Utilizarea namespace std;
În caz contrar, va trebui să specificați descriptorul clasei std::string peste tot în loc de string .
Mai jos este un exemplu de program care funcționează cu șir (nu funcționează în compilatoarele mai vechi compatibile cu C!):
#include
Principalele caracteristici pe care le are clasa string:
- inițializare cu o matrice de caractere (un tip șir încorporat) sau alt obiect de tip șir . Un tip încorporat nu are a doua capacitate;
- copierea unei linii pe alta. Pentru un tip încorporat trebuie să utilizați funcția strcpy();
- acces la caracterele individuale ale unui șir pentru citire și scriere. Într-o matrice încorporată, acest lucru se face folosind o operație de index sau adresare indirectă folosind un pointer;
- comparând două șiruri de caractere pentru egalitate. Pentru un tip încorporat sunt folosite funcțiile familiei strcmp();
- concatenarea (concatenarea) a două șiruri, producând rezultatul fie ca un al treilea șir, fie în locul unuia dintre cele originale. Pentru un tip încorporat, se folosește funcția strcat(), dar pentru a obține rezultatul într-o linie nouă, trebuie să utilizați secvențial funcțiile strcpy() și strcat() și, de asemenea, să aveți grijă de alocarea memoriei;
- mijloace încorporate de determinare a lungimii unui șir (funcțiile membre de clasă size() și l ength()). Singura modalitate de a afla lungimea unui șir de tip încorporat este prin calcularea acestuia folosind funcția strlen();
- capacitatea de a afla dacă un șir este gol.
Să ne uităm la aceste caracteristici de bază mai detaliat.
Inițializarea șirurilor când descrie şi lungimea șirului(fără a include terminatorul nul de terminare):
String st("Șirul meu\n"); cout<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";
Șirul poate fi, de asemenea, gol:
St2 șir;
Pentru a verifica asta este linia goală, puteți compara lungimea sa cu 0:
Dacă (! st.size()) // gol
sau utilizați metoda empty(), care returnează true pentru un șir gol și false pentru unul nevid:
Dacă (st.empty()) // gol
A treia formă de creare a șirului inițializează un obiect de tip șir cu un alt obiect de același tip:
St3 st3(st);
Șirul st3 este inițializat cu șirul st . Cum ne putem asigura că acestea liniile se potrivesc? Să folosim operatorul de comparație (==):
Dacă (st == st3) // inițializarea a funcționat
Cum copiați o linie pe alta? Folosind operatorul normal de atribuire:
St2 = st3; // copiați st3 în st2
Pentru concatenare de șiruri se utilizează operatorul de adăugare (+) sau operatorul de adunare plus atribuire (+=). Să fie date două linii:
String s1 ("bună ziua, "); șir s2(„lume\n”);
Putem obține un al treilea șir format dintr-o concatenare a primelor două, astfel:
Șirul s3 = s1 + s2;
Dacă vrem să adăugăm s2 la sfârșitul lui s1, ar trebui să scriem:
S1 += s2;
Operația de adăugare poate concatena obiecte de clasă şir nu numai între ele, ci și cu șiruri de tip încorporate. Puteți rescrie exemplul de mai sus, astfel încât caracterele speciale și semnele de punctuație să fie reprezentate de tipul încorporat char *, iar cuvintele semnificative să fie reprezentate de obiecte din șirul clasei:
Const char *pc = ", "; șir s1 ("bună ziua"); șir s2(„lume”); șir s3 = s1 + pc + s2 + "\n"; cout<< endl << s3;
Astfel de expresii funcționează deoarece compilatorul „știe” cum să convertească automat obiectele de tip încorporat în obiecte din clasa șir. De asemenea, este posibil să atribuiți pur și simplu un șir încorporat unui obiect șir:
Șirul s1; const char *pc = "o matrice de caractere"; s1 = pc; // Dreapta
Transformarea inversă în acest caz nu funcționează. Încercarea de a efectua următoarea inițializare a șirurilor de tip încorporat va cauza o eroare de compilare:
Char *str = s1; // eroare de compilare
Pentru a efectua această conversie, trebuie să apelați în mod explicit o funcție membru numită c_str() ("șir C"):
Const char *str = s1.c_str();
Funcția c_str() returnează un pointer către o matrice de caractere care conține șirul obiectului șir așa cum ar apărea în tipul șir încorporat. Cuvântul cheie const aici previne posibilitatea „periculoasă” în mediile vizuale moderne de a modifica direct conținutul unui obiect prin intermediul unui pointer.
LA personaje individuale Un obiect de tip șir, cum ar fi un tip încorporat, poate fi accesat folosind operația index. De exemplu, iată o bucată de cod care înlocuiește toate punctele cu caractere de subliniere:
String str("www.disney.com"); int size = str.size(); pentru (int i = 0; i< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;
Înlocuiește(str.begin(), str.end(), ".", "_");
Adevărat, nu metoda de înlocuire a clasei de șiruri este folosită aici, ci algoritmul cu același nume:
#include
Deoarece obiectul șir se comportă ca un container, i se pot aplica și alți algoritmi. Acest lucru vă permite să rezolvați probleme care nu sunt rezolvate direct de funcțiile clasei șir.
Mai jos este o scurtă descriere a principalelor operatori și funcții ale clasei șir de caractere legăturile din tabel conduc la descrieri în limba rusă de pe Internet. O listă mai completă a capabilităților clasei șir poate fi găsită, de exemplu, pe Wikipedia sau pe site-ul web cplusplus.com.
Specificarea caracterelor dintr-un șir |
|
operator= |
atribuie valori unui șir |
atribui |
atribuie caractere unui șir |
Acces la personaje individuale |
|
la |
obținerea caracterului specificat și verificarea dacă indexul este în afara limitelor |
operator |
obținerea caracterului specificat |
față |
obținerea primului personaj |
înapoi |
obținerea ultimului personaj |
date |
returnează un pointer la primul caracter al șirului |
c_str |
se intoarce nemodificabil o matrice de caractere C care conține caracterele șirului |
Verificarea capacității liniei |
|
gol |
verifică dacă un șir este gol |
mărimea |
returnează numărul de caractere dintr-un șir |
dimensiune_max |
returnează numărul maxim de caractere |
rezervă |
rezerva spatiu de depozitare |
Operații cu șiruri |
|
clar |
șterge conținutul unui șir |
introduce |
inserarea caracterelor |
şterge |
ștergerea caracterelor |
împinge înapoi |
adăugarea unui caracter la sfârșitul unui șir |
pop_back |
elimină ultimul caracter |
adăuga |
|
operator+= |
adaugă caractere la sfârșitul unui șir |
comparaţie |
compară două șiruri |
a inlocui |
înlocuiește fiecare apariție a caracterului specificat |
substr |
returnează un subșir |
copie |
copiază caracterele |
redimensiona |
modifică numărul de caractere stocate |
p»їAgenția SEO de încredere din India poate crește veniturile întreprinderilor mici 80% utilizatori caută pe Google și alte motoare de căutare înainte de a face o achiziție și peste 50% dintre întrebările generate prin motoarele de căutare sunt convertite. Aceste două statistici demonstrează importanța optimizării pentru motoarele de căutare. Există multe statistici și fapte ca atare care arată clar: orice afacere la scară mică, mijlocie sau mare are nevoie de servicii SEO profesionale. Întreprinderile mici și startup-urile se confruntă adesea cu probleme de buget. Ei pot lua ajutorul oricărei agenții SEO de încredere din India pentru a obține cel mai bun serviciu SEO în bugetul lor pentru a-și crește veniturile. sondaje din exil
|