Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Siruri de caractere (c++)

SIRURI DE CARACTERE (C++)


1. Consideratii teoretice

1.1. Reprezentarea in memorie a unui sir de caractere

Un sir de caractere este pastrat intr-un tablou unidimensional de tip char. Fiecare caracter se pastreaza intr-un octet prin codul ASCII al sau. Ultimul caracter al sirului, deci terminatorul sirului, este caracterul NULL ('0').

1.2. Functii standard de prelucrare a sirurilor de caractere

Functiile standard de citire/scriere a sirurilor de caractere:

gets/puts;

In continuare sunt prezentate cateva functii de prelucrare a sirurilor de caractere, al caror prototip se gaseste in fisierul string.h



1.2.1. Lungimea unui sir de caractere

Lungimea unui sir de caractere, fara a fi luat in considerare caracterul '0', este returnat de functia strlen, care are prototipul:


unsigned strlen (const char *s);

Exemplu:

#include <iostream.h>

#include <string.h>

void main(void)


1.2.2. Copierea unui sir de caractere


Copierea unui sir de caractere dintr-o zona de memorie de adresa sursa intr-o alta zona de memorie de adresa dest se face cu ajutorul functiei strcpy, al carei prototip este:


char *strcpy (char *dest, const char *sursa);


Se mentioneaza ca are loc copierea inclusiv a caracterului NULL('0').


Functia returneaza adresa unde a avut loc copierea, adica chiar destinatia.

Pentru a copia cel mult n caractere, din zona de memorie de adresa sursa in zona de memorie de adresa dest, se va folosi functia strncpy, al carei prototip este urmatorul:


char *strncpy (char *dest, const char *sursa, unsigned n);


Dupa ultimul caracter transferat, trebuie pus caracterul '0'.

Evident ca daca n > lungimea sirului de la adresa sursa, atunci are loc transferarea intregului sir de caractere.


Exemplu:


#include <iostream.h>

#include <string.h>

void main(void)


1.2.3. Concatenarea a doua siruri de caractere


Adaugarea sirului de caractere de la adresa sursa dupa ultimul caracter (cel care precede NULL) al sirului de caractere de la adresa dest se face cu ajutorul functiei strcat, care are prototipul:




char *strcat(char *dest, const char *sursa);


Dupa sirul rezultat, se pune evident caracterul NULL ('0'). Functia retuneaza valoarea adresei destinatie. Exista posibilitatea de a prelua din sirul de caractere de la adresa sursa numai n caractere, cu ajutorul functiei strncat, care are prototipul:


char *strncat (char *dest, const char *sursa, unsigned n);


La sfarsit se pune automat caracterul NULL ('0').

Daca n> lungimea sirului de la adresa sursa, atunci functia strncat are acelasi efect ca si functia strcat.

Exemplu:


#include <string.h>

void main(void)


1.2.4. Compararea a doua siruri de caractere


Compararea a doua siruri de caractere se face caracter cu caracter (pe baza codurilor ASCII) pana cand:

s-a ajuns la un caracter i din primul sir care difera de caracterul i din al doilea sir;

s-a ajuns la sfarsitul unuia din siruri sau a ambelor.


Compararea a doua siruri de caractere de la adresele sir1 si respectiv sir2 se poate face cu functia de prototip:


int strcmp(const char *sir1,const char *sir2);


Functia returneaza:

o valoare negativa daca sirul de caractere de la adresa sir1 este mai mic decat cel de la adresa sir2;



zero daca sirurile sunt egale;

o valoare pozitiva, daca sirul de la adresa sir1 este mai mare decat cel de la adresa sir2.


Daca dorim sa se compare numai primele n caractere din cele doua siruri se foloseste functia de prototip:


int strncmp (const char *sir1, const char *sir2, unsigned n);


Daca dorim sa nu se faca distinctie intre literele mici si cele mari, atunci cele doua functii au drept corespondente:


int stricmp (const char *sir1, const char *sir2);

int strnicmp (const char *sir1, const char *sir2, unsigned n);



Exemplu:


#include <iostream.h>

#include <string.h>

main ( )



2. Probleme propuse


1. Se va scrie o functie care sa realizeze extragerea dintr-un sir de caractere sursa a unui subsir specificat prin pozitia in cadrul sursei si a numarului de caractere extrase.


2. Se va scrie o functie pentru inserarea unui sir de caractere sursa intr-un sir de caractere destinatie, specificand pozitia din care incepe inserarea.


3. Se va scrie o functie pentru stergerea unui subsir dintr-un sir de caractere dat. Subsirul se va specifica prin pozitie si numar de caractere.


4. Se va scrie o functie pentru a verifica daca un sir dat este subsir al unui alt sir de caractere. In caz afirmativ, se va specifica pozitia pe care se regaseste pentru prima data.


5. Sa se scrie doua functii, una care converteste un numar intreg sau real intr-un sir de caractere, iar cealalta face operatia inversa.


6. Sa se scrie un program care citeste n siruri de caractere si afiseaza sirul cel mai lung si sirul cel mai mare alfanumeric.