Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

C


Index » educatie » » informatica » C
» SIRURI DE CARACTERE


SIRURI DE CARACTERE


SIRURI DE CARACTERE

Tipul CHAR

lFolosit pentru retinerea caracterelor

lO valoare de tip char este inclusa intre ' '

lSe memoreaza pe un octet

lIn C++ nu exista tipul sir de caractere, asa ca, pentru siruri de caractere se foloseste tipul char



Declararea sirurilor de caractere

lchar nume_sir[lungime];

lchar *a;

Citirea sirurilor

lUn sir de caractere se termina cu '0'

lAtunci cand se citeste un sir de caractere de la tastatura se introduce valoarea sirului si se apasa enter.

lDaca se foloseste cin atunci se retin in sir toate caracterele pana la primul spatiu.Daca vrem ca sirul sa contina si spatii se va folosi cin.get()

cin.get()

lForma:

cin.get(nume, lungime,caracter );

lnume=numele sirului care trebuie citit

llungime=numarul maxim de caractere care se vor citi

lcaracter=citirea sirului se face sau pana se apasa enter sau pana se intalneste acest caracter

lCaracterul este optional.

Exemplu

char a[20];

cin.get(a,15);

Explicatii:

lSirul va avea 20 de caractere dintre care unul va fi cel de sfarsit de sir

lLa citire se vor retine in sir maximul 15 caractere

Citirea mai multor siruri

lPentru a putea citi mai multe siruri de caractere, dupa citirea fiecarui sir se va scrie

cin.get();

Exemplu

#include<iostream.h>

#include<conio.h>

void main()

lExplicatii

Acest program va citi 2 siruri de caractere: a de maximul 20 caractere si b de maximul 15 caractere.

La citire in a se vor citi maximul 5 caractere, iar in b maximul 7

Datorita faptului ca cin.get(); este pus dupa comentarii sirul b nu va fi citit.

Functii pentru prelucrarea sirurilor de caractere

lstrlen

lstrcat

lstrncat

lstrcpy

lstrchr

lstrrchr

lstrcmp

lstricmp

lstrstr

lstrtok

lstrcspn

lstrlwr

lstrupr

latof

latoi

latol

1.Functia strlen

lForma:

int strlen(const char* s)

lIntoarce lungimea sirului de caractere de adresa s

lObs: nu se numara

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]="acesta este un exemplu";

cout<< strlen(a);

Se va afisa 22 pentru ca a are 22 de cractere

2.Functia strcpy

lRealizeaza copierea sirurilor de caractere

lForma generala:

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

lcopieaza sirul de adresa sursa la adresa dest.

lcopierea se termina dupa ce a fost copiat caracterul nul

lse returneaza adresa dest

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]="primul sir",b[ ]="al doilea sir";

strcpy(b,a);

cout<<"b="<<b;

Se va afisa :

b=primul sir

fiindca in b s-a copiat a

Exercitiu

1) Fiind date 2 siruri de caractere a si b, sa se interschimbe continutul sirurilor

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

3.Functia strcat

lForma generala:

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

ladauga sirului de adresa dest sirul de adresa sursa.

lrezultatul este adresa sirului sursa

laceasta operatie se numeste concatenare

lsirul de adresa sursa ramane nemodificat

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]="concatenarea",b[ ]=" sirurilor";

strcat(a,b);

cout<<"a="<<a;

Se va afisa :

a=concatenarea sirurilor

fiindca prin concatenare la sfarsitul lui a se adauga caracterele din b

Exercitiu

2) Fiind dat un sir de caractere ce reprezinta numele de familie al unei persoane si un alt sir ce reprezinta prenumele persoanei, sa se creeze un al treilea sir care sa reprezinte numele intreg al persoanei respective si sa se afiseze pe ecran

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

4.Functia strncat

lForma generala:

char *strncat(char *dest, char *sursa, size_t n)

lAre acelasi rol ca si strcat cu deosebirea ca adauga sirului destinatie primii n octeti ai sirului sursa

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]="concatenarea",b[ ]=" primilor n octeti din b";

strncat(a,b,18);

cout<<"a="<<a;

Se va afisa :

a=concatenarea primilor n octeti

fiindca prin concatenare la sfarsitul lui a se adauga primele 18 caracterele din b

Exercitiu

3) Fiind date 2 siruri de caractere a si b, sa se adauge lui a toate caracterele din b pana cand in b se intalneste caracterul ' '.Daca in b nu exista ' ' se va adauga tot sirul b

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

5.Functia strchr

lForma generala:

char *strchr(char *sursa, char c)

lCauta caracterul c in sirul sursa.Cautarea se face de la stanga la dreapta

lDaca caracterul a fost gasit functia returneaza adresa subsirului care incepe cu prima aparitie a caracterului citit si se termina cu caracterul nul al sirului in care se face cautarea

lDaca nu a fost gasit functia intoarce o expresie de tipul char* cu valoarea 0 (o adresa vida)

Exemplu

lFie urmatoarea secventa de instructiuni:

char b[ ]="bacalaureat";

cout<<strchr(b,'a');

Se va afisa :

acalaureat

Exercitii:

4_1) Fiind dat un sir de caractere, sa se verifice daca sirul contine caracterul 'y' si sa se afiseze indicele primei aparitii daca 'y' este in sir, altfel sa se afiseze mesajul "nu exista" .

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

4_2) Fiind date un sir de caractere si un caracter, sa se afiseze de cate ori apare caracterul in sir.

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

cout<<'nr aparitii='<<nr;

getch();

6.Functia strrchr

lForma generala:

char *strrchr(const char *sursa, char c)

lcauta caracterul c in sirul sursa.Cautarea se face de la stanga la dreapta

ldaca caracterul a fost gasit functia returneaza adresa subsirului care incepe cu ultima aparitie a caracterului citit si se termina cu caracterul nul al sirului in care se face cautarea

lDaca nu afost gasit functia intoarce o expresie de tipul char* cu valoarea 0 (o adresa vida)

Exemplu

lFie urmatoarea secventa de instructiuni:

char b[ ]="bacalaureat";

cout<<strrchr(b,'a');

Se va afisa :

at

Exercitii

5) Fiind dat un sir de caractere sub forma de cuvinte despartite printr-un singur spatiu (sirul nu are spatii la inceput si sfarsit), sa se afiseze primul caracter al ultimului cuvant.

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

7.Functia strcmp

lForma generala:

int strcmp(const char *s1,const char *s2)

lCompara lexicografic 2 siruri de caractere.Valoarea returnata este:

<0, daca s1<s2

=0, daca s1=s2

>0, daca s1>s2

Observatii

lOrdine lexicografica= ordinea cuvintelor in dictionar (s1<s2 daca s1 apare in dictionar inaintea lui s2)

lFunctia strcmp nu face distinctia intre literele mici si mari ale alfabetului

lCompararea celor 2 siruri se face de la stanga la dreapta

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]='anomalie',b[ ]='anatomie';

if(strcmp(a,b)>0) //adica 'a>b'

cout<<a;

else cout<<b;

Se va afisa :

anomalie

Exercitii

6) Se citesc 2 siruri de caractere reprezentand numele a 2 persoane.Sa se afiseze numele in ordine alfabetica

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

8.Functia stricmp

lForma generala:

int stricmp(const char *s1,const char *s2)

lAre acelasi rol ca strcmp, diferenta este ca nu face distinctia intre literele mici si mari ale alfabetului.

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]='id@gmail.com',b[ ]='gmail';

if(strstr(a,b)!=0) //adica b se regaseste in a

cout<<'b subsir a lui a';

else cout<<'b nu este subsir a lui a';

Se va afisa :

b subsir a lui a

Exercitii

7) Se citeste un numar n natural (3<n<11), apoi n siruri de caractere reprezentand numele a n persoane.Sa se afiseze aceste nume in ordine alfabetica (nu se face distinctia intre literele mari si mici).

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

for(i=0;i<n;i++)

for(j=i+1;j<n;j++)

if (stricmp(a[i],a[j])>0)

for(i=0;i<n;i++)

cout<<a[i]<<endl;

getch();

9.Functia strstr

lForma generala

char *strstr(const char *s1,const char *s2);

lIdentifica daca s2 este subsir al lui s1

lDaca s2 este subsir al lui s1 , functia returneaza adresa de inceput a primei aparitii al sirului s2 in cadrul sirului s1, altfel returneaza adresa 0.

Exemplu

lFie urmatoarea secventa de instructiuni:

char a[ ]="id@gmail.com",b[ ]=" gmail";

strcat(a,b);

cout<<"a="<<a;

Se va afisa :

a=concatenarea sirurilor

fiindca prin concatenare la sfarsitul lui a se adauga caracterele din b

Exercitiu

8) Fiind date 2 siruri de caractere, sa se verifice daca al doilea este subsir in primul.Daca da, sa se afiseze "da", altfel sa se afiseze "nu".

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

9)Fiind dat un numar natural n (2<n<21) reprezentand adresele de mail a n persoane,id-ul unei persoane,apoi n adrese de mail, sa se afiseze toate adresele de mail ale persoanei careia i se cunoste id-ul.Daca nu are nici o adresa sa se afiseze mesajul "nu se gaseste"

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

cout<<'dati id-ul persoanei ';

cin.get(b,25);

nr=0;

for(i=0;i<n;i++)

if (strstr(a[i],b)!=0)

if (nr==0) cout<<'nu se gaseste';

getch();

10.Functia strtok

lForma generala

char *strtok(char *s1, const char *s2)

lUnde s1 este considerat a fi alcatuit din 1,2, . .n entitati separate prin unul sau mai multe caractere cu rol de separatori care apartin lui s2

Principiu de executie strtok

lPrima apelare trebuie sa fie de forma strtok(s1,s2): va intoarce adresa de inceput al primei entitati si separatorul este inlocuit prin caracterul nul;

lUrmatoarele apeluri sunt de forma strtok(NULL,s2) si intoarce adresa de inceput a fiecarei noi entitati, apoi inlocuieste separatorul cu nul

lDaca sirul nu mai are entitati functia intoarce adresa nula

Exemplul1

lFie urmatoarea secventa de instructiuni:

char a[ ]='cuvant1, cuvant2 cuvant3;cuvant4";

char b[ ]=', ;',*p;

p=strtok(a,b);

cout<<p<<endl;

Se va afisa :

cuvant1

Exemplul2

lFie urmatoarea secventa de instructiuni:

char a[ ]='cuvant1, cuvant2 cuvant3;cuvant4',b[ ]=', ;',*p;

p=strtok(a,b);

while(p!=0)

lSe va afisa :

cuvant1

cuvant2

cuvant3

cuvant4

Exercitiu

10)Fiind date mai multe cuvinte separate prin spatiu, punct si virgula, virgula, sa se afiseze fiecare cuvant pe o linie.

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

getch();

11)Fiind dat un numar n si un text reprezentand n adrese de mail la acelasi provider despartite prin virgula, sa se afiseze id-urile asociate adreselor.

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

getch();

11.Functia strspn

l Forma

size_t strspn(char* s1, char* s2);

l Returneaza numarul de caractere ale sirului s1 - caractere consecutive care incep obligatoriu cu primul caracter - care se gasesc in sirul s2.

Exemplul1

lFie char *s1="AB2def",*s2="16A32BF".

lAtunci strspn(s1,s2) returneaza 3 pentru ca din s1 se gasesc in s2 caracterele 'A','B','2'

Exemplul2

lFie char *s1="AB2def",*s2="123".

lAtunci strspn(s1,s2) returneaza 0 pentru ca primul caracter din s1 nu se gaseste in s2

Exercitiu

12)Fiind data o fraza si un cuvant x, sa se afiseze cate cuvinte din fraza pot fi obtinute din caracterele lui x printre care se pot exista si alte caractere

De exemplu daca fraza este:"Mioara este la mare" si cuvantul este: "mar" se va afisa 2

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

cout<<nr;

getch();

12.Functia strlwr

lForma generala

char* strlwr(char* s)

lConverteste literele mari in litere mici in sirul de la adresa s.

lFunctia intoarce adresa s.

lObs: Restul caracterelor raman neschimbate

Exemplu

lFie urmatoarea secventa de instructiuni:

char b[ ]="bACalaUrEat";

cout<<strlwr(b);

Se va afisa :

bacalaureat

Exercitiu

13) Intr-un text sunt mai multe cuvinte despartite prin ',' ,' ' , ';' , '.' care pot contine litere mari si mici.Sa se afiseze cuvintele care au ca subsir de caractere sirul "ale"

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

getch();

13.Functia strupr

lForma generala

char* strupr(char* s)

lConverteste literele mici in litere mari in s

lFunctia intoarce adresa s.

lObs: Restul caracterelor raman neschimbate

Exercitiu

14)Fie x un cuvant care contine litere mici si mari.Sa se afiseze cate vocale contine(daca o vocala se repeta va fi numarata de cate ori se repeta).

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

Exemplu

lFie urmatoarea secventa de instructiuni:

char b[ ]="bACalaUrEat";

cout<<strupr(b);

Se va afisa :

BACALAUREAT

II.CONVERSIA SIRURILOR IN VALORI NUMERICE SI INVERS

Functiile utilizate pentru conversia valorilor numerice in sir si invers au prototipul stdlib.h.

14.Functia atof

lFunctia atof converteste un sir catre tipul double.

lForma:

double atof(const char *s)

Daca conversia esueaza (se intalneste un caracter nenumeric) valoarea intoarsa este 0. Daca primele caractere ale sirului sunt albe, acestea sunt ignorate.

Exemplul1

lFie urmatoarea secventa de instructiuni:

char b[ ]=" 123.45';

float a=12.45 ;

cout<<a+atof(b);

Se va afisa:

135.9

Exemplul2

lFie urmatoarea secventa de instructiuni:

char b[ ]=" abc123.45';

Char c[ ]=" 123ab.45';

cout<<atof(b)<<endl;

cout<<atof(c);

Se va afisa:

0

123

Exercitiu

15) Fie un text care contine cuvinte reprezentand numele unor elevi sau media lor separate prin ',' si ' '. Sa se afiseze toate mediile din text. (In cuvintele reprezentand medii sunt doar cifre si caracterul '.')

#include<iostream.h>

#include<conio.h>

#include<string.h>

void main()

getch();

15.Functia atoi

lFunctia atoi converteste un sir catre tipul int: int atoi(const char *s);

Exemplul

lFie urmatoarea secventa de instructiuni:

char b[ ]='321';

char c[ ]=' 123.45';

cout<<atoi(b)<<endl<<atoi(c);

lSe va afisa:

321

123

Exercitiu

16)Fie un sir de caractere format din mai multe numere reale despartite prin spatiu.Sa se afiseze suma partilor intregi a numerelor

De exemplu, daca sirul este "12.6 3 3.5 7 4.6" se va afisa 39

#include<iostream.h>

#include<conio.h>

#include<string.h>

#include<stdlib.h>

void main()

cout<<s;

getch();

16.Functia atol

lFunctia atol converteste un sir catre tipul long:

Forma generala:

long atol(const char *s);

Exemplu

lFie urmatoarea secventa de instructiuni:

char b[ ]='987654321';

long c=atol(b);

cout<<c;

lSe va afisa:

987654321

17.Functia _atold

lFunctia _atold converteste un sir catre tipul long double:

Forma generala:

long double _atold(const char *s);

18.Functia ecvt

lFunctia ecvt are rolul de a converti o valoare de tip double catre un sir. Caracterul nul este adaugat automat sirului obtinut.

lForma generala este:

char* ecvt(double valoare, int poz, int* zec, int* semn);

unde:

valoare - valoarea de convertit;

poz - numarul de pozitii pe care trebuie sa le ocupe sirul in urma conversiei;

zec - adresa unei variabile, de tip int, care retine, dupa apel, numarul zecimalelor pe care le are numarul;

semn - adresa unei variabile, de tip int, care are rolul de a memora, dupa apel, 1, daca numarul este negativ, sau 0, in caz contrar.

lDaca a este o variabila, &a este adresa ei.

lVariabila zec retine dupa apel numarul intregilor, iar variabila semn semnul rezultatului.

lFunctia nu insereaza in sir nici punctul zecimal, nici semnul numarului.

lSirul obtinut incepe cu cifra cea mai semnificativa a numarului.

lDaca numarul pozitiilor ocupate de sir (poz) este mai mare decat ocupa data, sirul este completat in stanga cu un numar de 0 necesar.

lIn cazul in care numarul pozitiilor este mai mic decat cel ocupat de numar, rezultatul este rotunjit.

19.Functia itoa

lFunctia itoa are rolul de a converti o valoare de tip int in sir, care este memorat in variabila sir.

char* ltoa(long valoare, char * sir, int baza);

lValoarea baza retine baza de numeratie catre care sa se faca conversia.In cazul bazei 10, sirul obtinut retine si eventualul semn -

lFunctia intoarce adresa sirului obtinut.

20.Functia ltoa

lFunctia ltoa are acelasi efect ca itoa, deosebirea fiind data de faptul ca se converteste catre sir o valoare de tip long int.

char* ltoa(long valoare, char * sir, int baza);

21.Functia ultoa

lFunctia ultoa are acelasi efect ca itoa, deosebirea fiind data de faptul ca se converteste catre sir o valoare de tip unsigned long.

char* ultoa(unsegned long valoare, char * sir, int baza);

21.Functia strtol

l Functia

long strtol(const char *s, char **endptr, int baza);

are rolul de a converti un sir catre long. In afara sirului care trebuie convertit, functia primeste ca parametru de intrare adresa unei variabile de tip char*. Dupa apel, aceasta variabila va retine pozitia primului caracter din sir care nu poate fi convertit.

Exercitiu

lFie un sir de caractere a format din litere si cifre. Sa se adune toate numerele care sunt intercalate intre litere.

lDe exemplu, pentru "a12b3n45h8"se va afisa 68 (12+3+45+8)

22.Functia strtod

lFunctia

double strtod(const char *s, char **endptr);

converteste un sir catre double.

23.Functia _strtold

lFunctia

long double_strtold(const char *s, char *endptr);

converteste un sir catre long double.

24.Functia strtoul

lFunctia

unsigned long strtoul(const char *s, char **endptr, int baza);

converteste un sir catre unsigned long.

lIn caz de depasire - adica numarul nu poate fi memorat deoarece este in afara tipului - functiile strtol, strtod, strtold si strtoul returneaza cea mai mare sau cea mai mica valoare care poate fi memorata de tipul in care se face conversia, dupa cum valoarea este pozitiva sau negativa

Exercitii

1. Scrieti o functie C care stabileste daca un sir de caractere dat ca parametru reprezinta un palindrom. Pentru aceasta este necesar ca primul si ultimul caracter din sirul de caractere sa fie egale, al doilea si penultimul, s.a.m.d.

Functia intoarce 1 daca sirul de caractere este un palindrom si 0 in caz contrar.

2. Un text citit de pe mediul de intrare reprezinta un program C. Sa se copieze pe mediul de iesire, pastrand structura liniilor, dar suprimand toate comentariile.

3. Dintr-un text, citit de pe mediul de intrare, sa se separe toate cuvintele, plasandu-le intr-un vector cu elemente siruri de caractere de lungime 10 (cuvintele mai scurte se vor completa cu spatii libere, iar cele mai lungi se vor trunchia la primele 10 caractere.

Se vor afisa elemenetele acestui tablou, cate 5 elemente pe o linie, separate intre ele prin 2 asteriscuri.

4. Dintr-un text citit de pe mediul de intrare sa se afiseze toate cuvintele care contin cel putin 3 vocale distincte.

5. Scrieti un program care citeste si afiseaza un text si determina numarul de propozitii si de cuvinte din text. Fiecare propozitie se termina prin punct, iar in interiorul propozitiei cuvintele sunt separate prin spatii, virgula sau liniuta. 6. De pe mediul de intrare se citeste un text format din cuvinte separate prin spatii libere. Sa se afiseze acest text la iesire, pastrand structura liniilor si scriind in dreptul liniei cel mai lung cuvant din linie. Daca mai multe cuvinte au aceeasi lungime maxima, va fi afisat numai primul dintre ele.

7. Scrieti un program care citeste de la intrarea standard cuvinte, pana la intalnirea caracterului punct si afiseaza cate un cuvant pe o linie, urmat de despartirea acestuia in silabe. Se utilizeaza urmatoarele reguli de despartire in silabe:

-o consoana aflata intre doua vocale trece in silaba a doua

-in cazul a doua sau mai multe consoane aflate intre doua vocale, prima ramane in silaba intaia, iar celelalte trec in silaba urmatoare.

-Nu se iau in considerare exceptiile de la aceste reguli.

8. Sa se transcrie la iesire un text citit de la intrarea standard, suprimand toate cuvintele de lungime mai mare ca 10. Cuvintele pot fi separate prin punct, virgula sau spatii libere si nu se pot continua de pe o linie pe alta.

9. Scrieti un program care citeste de la intrarea standard un text terminat prin punct si il transcrie la iesirea standard, inlocuind fiecare caracter '*' printr-un numar corespunzator de spatii libere care ne pozitioneaza la urmatoarea coloana multiplu de 5. Se va pastra structura de linii a textului.

10. Scrieti un program pentru punerea in pagina a unui text citit de la intrarea standard. Se fac urmatoarele precizari:

lcuvintele sunt separate intre ele prin cel putin un spatiu

lun cuvant nu se poate continua de pe o linie pe alta

llungimea liniei la iesire este N

llungimea maxima a unui cuvant este mai mica decat N / 2

lIn textul rezultat se cere ca la inceput de linie sa fie un inceput de cuvant, iar sfarsitul de linie sa coincida cu sfarsitul de cuvant. In acest scop, spatiile se distribuie uniform si simetric intre cuvinte. Face exceptie doar ultima linie. Caracterul punct apare doar la sfarsit de text.






Politica de confidentialitate




Copyright © 2024 - Toate drepturile rezervate