Definim sirul de caractere ca fiind o succesiune de
carcatere cuprinsa intre 2 perechi de ghilimele si care poate sa contina orice caracter: litere mari si mici , cifre , caractere speciale ( ? , ! etc.) si delimitatori ( , , ; etc.). Mai putem defini sirul de caractere ca fiind o structura de date ce este formata dintr-o multime ordonata de caractere in care fiecare caracter se identifica prin pozitia sa in cadrul multimii. Exemplu: char v[50] v=( a , ! , o , u, x) In cazul sirurilor de carctere, acestea se termina cu cel putin un caracter nul NULL sau ( \o) care marcheaza sfarsitul sirului de caractere. OBS-Lungimea unui sir de carctere va trebui intotdeauna declarata ca fiind lungimea enuntata in problema plus 1 (rezervat pntru caracterul nul). Declrarea sirului de caractere a) Ca variabila: char nume_sir[dim_max] -unde dim_max contine cel putin un loc rezervat pentru caracterul nul. b) Ca pointer Un pointer este o variabila care retine adresa de memorie a unei alte variabile . Numele unui tablou si al unui sir de caractere sunt interpretate de compilatorul C++ ca fiind o constanta de tip adresa adica o constanta de tip pointer. Dimensiunea efectiva a unui sir de caractere este data de numarul efectiv de caractere din sirul respectiv. Daca dim_max a sirului de caractere este mai mare decat lungimea efectiva a sirului atunci diferenta dintre ele va fi umpluta cu caracterul nul. Exemplu: char s[7]=test; Lungimea efectiva =4 dim_max=7 Sirul vid va avea lungimea 0. Citirea sirurilor de carctere a) Citirea unui sir de caractere care nu contine spatii => cin>>nume_sir; Exemplu: char s[7] ,s1[10]; cout<<s=; cin>>s; //test cout<<s<<endl;// test cout<<s1=; cin>>s1;//Ala bala cout<<s1;//Ala Daca se incearca citirea unui sir de caractere ce contine spatii cu ajutorul lui cin , atunci citirea se va opri la primul caracter spatiu intalnit. b)Citirea unui sir de carcatere ce contine spatii. Se realizeaza cu functia cin.get(nume_sir, caracter delimitator,nr_caractere); Se realizeaza citirea sirului de caractere pana cand se intampla unul din evenimentele: S-a intalnit caracterul delimiator specificat S-au citit cele nr carctere Exemplu: s=Am niste gaini; cin.get(s,100);// Am niste gaini cin.get(s,g,100);//Am niste OBS: Daca este necesar sa citim mai multe siruri de caractere unul dupa celalalt folosind cunctia cin.get atunci este necesar sa golim buferul de memorie de caracterul nul.Aceasta se realizeaza prin folosirea functiei cin.get fara parametri. ( cin.get();) Exemplu: cin.get(s,61); cin.get(); cin.get(s1,25); OBS:Putem citi sirurile de caractere folosind si functiile puts si gets specifice limbajului C. Pentru a putea folosi functiile cin.get trebuie sa folosim fisierul header string.h. Determinarea lungimii efective a sirurilor de caractere se realizeaza cu ajutorul functiei strlen(nume_sir), functie care se gaseste in string.h. Prelucrarea sirurilor de caractere ca vector de caractere. Asa cum rezulta din definitia unui sir de caractere acesta poate fi tratat ca un vector de caractere. Si in cazul sirurilor de caractere indicii de pozitie pleaca de la 0. for(i=0;i<strlen(sir);i++) <prelucreaza sir[i]>
Aplicatii:
1. Se citeste de la tastatura un sir de caractere de
maxim 70 de caractere. Sa se afiseze sirul , sa se afiseze unele sub altele caracerele din sir alaturi de codul ASCII si sa se afiseze numarul literelor mari din sir. #include <iostream> #include<strng.h> using namespace std; int main() {chars[71]; int nr=0,i; cin.get(s,71); cout<<s=<<s<<endl; for(i=0;i<strlen(s);i++) cout<<s[i]<< <<(int) s[i]<<endl; for(i=0;i<strlen(s);i++; if(s[i]>=A&&s[i]<=Z) nr++; cout<<nr=;<<nr; return 0; 2.Se citesc de la tastatura n caractere citite unul dupa altul. Sa se afiseze sirul de caractere ce se poate forma cu aceste caractere. #include <iostream> #include<strng.h> using namespace std; int main() {int n,i,char c ,s[100]; cout<<n=; cin>>n; for(i=0;i<n;i++) {cout<Introdu caracterul:; cin>>c; s[i]=c;//Obtinem vectorul de caractere } I0++; s[i-1]=\0; //Obt sir de caractere adaugand caracterul nul cout<<s; return 0; }