Sunteți pe pagina 1din 6

Laborator – programarea calculatoarelor

Limbajul C++
Adrian Runceanu

Laborator nr. 8 - Siruri de caractere (tipul de date char)

Probleme rezolvate:

1. Sa se scrie o functie care sa returneze lungimea unui sir de caractere, transmis ca


parametru.
2. Scrieti un program care citeste un sir de caractere si transforma sirul in sir cu litere mici.
3. Sa se afiseze unul sub altul, toate prefixele proprii ale unui cuvant citit de la tastatura
(prefixele unui cuvant sunt compuse din minim un caracter si maxim toate caracterele, citite
de la stanga la dreapta).
4. Sa se verifice daca doua cuvinte citite de la tastatura rimeaza (spunem ca doua cuvinte
rimeaza daca ultimele doua caractere sunt identice).
5. Se citeste un sir de caractere de la tastatura. Sa se scrie un program C++ care sa afiseze
numarul de vocale si de consoane din sirul dat.

Solutii:

Problema 1:
Sa se scrie o functie care sa returneze lungimea unui sir de caractere, transmis
ca parametru.

#include<iostream.h>
int lungime(char s[30])
{
int i;
i=0;
while(s[i]!=0) i++;
return i;
}
void main(void)
{
char s[30];
int l;
cout<<"Dati sirul de caractere ";cin>>s;
l=lungime(s);
cout<<"Numarul de caractere ale sirului este "<<l;
}

Problema 2:

Scrieti un program care citeste un sir de caractere si transforma sirul in sir cu


litere mici.

#include<iostream.h>
void litere_mici(char s[30])
{
int i;
i=0;
while(s[i]!=0)
{
if( (s[i]>=65) && (s[i]<=90) ) s[i]=s[i]+32;

1
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
i++;
}
return;
}
void main(void)
{
char s[30];
int l;
cout<<"Dati sirul de caractere ";cin>>s;
litere_mici(s);
cout<<"Sirul transformat in litere mici este "<<s;
}

Problema 3:

Sa se afiseze unul sub altul, toate prefixele proprii ale unui cuvant citit de la
tastatura (prefixele unui cuvant sunt compuse din minim un caracter si maxim toate
caracterele, citite de la stanga la dreapta).

#include<iostream.h>
void prefixe(char s[30])
{
int i,j;
i=0;
while(s[i]!=0)
{
for(j=0;j<=i;j++) cout<<s[j];
cout<<endl;
i++;
}
return;
}
void main(void)
{
char s[30];
int l;
cout<<"Dati sirul de caractere ";cin>>s;
cout<<"Prefixele sirului dat sunt : "<<endl;
prefixe(s);
}

Problema 4:
Sa se verifice daca doua cuvinte citite de la tastatura rimeaza (spunem ca doua
cuvinte rimeaza daca ultimele doua caractere sunt identice).

#include<iostream.h>
int rima(char s[30],char t[30])
{
int i,j;
i=0;
while(s[i]!=0) i++;
j=0;
while(t[j]!=0) j++;
if( (s[i]==t[j]) && (s[i-1]==t[j-1]) ) return 1;
else return 0;
}

2
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
void main(void)
{
char s[30],t[30];
int l;
cout<<"Dati primul sir de caractere ";cin>>s;
cout<<"Dati al doilea sir de caractere ";cin>>t;
if( rima(s,t)==1 ) cout<<s<<" rimeaza cu "<<t;
else cout<<s<<" NU rimeaza cu "<<t;
}

Problema 5:

Se citeste un sir de caractere de la tastatura. Sa se scrie un program C++ care


sa afiseze numarul de vocale si de consoane din sirul dat.

#include<iostream.h>
void main(void)
{
char s[50];
int voc=0,cons=0,i;
cout<<"Dati sirul de caractere ";cin>>s;
i=0;
while(s[i]!=0)
{
switch (s[i]){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': {voc++;break;}
default : cons++;
}
i++;
}
cout<<"Numarul de vocale ale sirului este "<<voc<<endl;
cout<<"Numarul de consoane ale sirului este "<<cons<<endl;
}

Problema 6:

Sa se scrie un program care determina de cate ori apare un anumit caracter


intr-un sir de caractere.

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>

3
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
char s[256],c;
int i,j;

void main(void)
{
clrscr();
cout<<"Introduceti sirul = ";cin>>s;
cout<<"Introduceti caracterul cautat = ";c=getchar();
j=0;
if(c=='\n') c=' ';
for(i=1;i<=strlen(s);i++)
{
if(s[i-1]==c)
j++;
}
cout<<"Caracterul exista in sir de "<<j<<" d ori "<<endl;
getch();
}

Problema 7:

Sa se scrie un program care sterge toate aparitiile unui subsir din cadrul unui sir.

Vom folosi cateva functii specifice sirurilor de caractere care sunt definite in fisierul
header <string.h>:
Ø Functia strlen(s) – returneaza lungimea sirului dat ca parametru
Ø Functia strstr(s1, s2) – returneaza pozitia unde apare subsirul s2 in sirul s1
Ø Functia strcpy(s1, s2) – copieaza sirul s2 in sirul s1

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>

char sir[100],subsir[25],*p;
int lung_subsir;

void main(void)
{
clrscr();
cout<<"Introduceti sirul = ";cin>>sir;
cout<<"Introduceti subsirul = ";cin>>subsir;
lung_subsir=strlen(subsir);
p=strstr(sir,subsir);
while(p)
{
strcpy(p,p+lung_subsir);
p=strstr(p,subsir);
}
cout<<sir;
getch();
}

4
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu

Problema 8:

Se citesc n cuvinte. Se cere sa se ordoneze alfabetic.

Vom folosi cateva functii specifice sirurilor de caractere care sunt definite in fisierul
header <string.h>:
Ø Functia strcmp(s1,s2) – returneaza valoarea 0 daca sirul s1 este egal cu sirul
s2, valoarea 1 daca sirul s1 este mai mare decat sirul s2 sau -1 daca sirul s1
este mai mic decat sirul s2
Ø Functia strcpy(s1, s2) – copieaza sirul s2 in sirul s1

#include<iostream.h>
#include<conio.h>
#include<string.h>

char cuvinte[10][25],temp[25];
int i,n,gasit=1;

void main(void)
{
clrscr();
cout<<"Introduceti numarul de cuvinte n = ";cin>>n;
for(i=0;i<n;i++)
{
cout<<"cuvant ";
cin>>cuvinte[i];
}

while(gasit==1)
{
gasit=0;
for(i=0;i<n-1;i++)
if(strcmp(cuvinte[i],cuvinte[i+1]) > 0)
{
strcpy(temp, cuvinte[i]);
strcpy(cuvinte[i],cuvinte[i+1]);
strcpy(cuvinte[i+1],temp);
gasit=1;
}
}
for(i=0;i<n;i++)
cout<<cuvinte[i]<<endl;
getch();
}

5
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu

Probleme propuse spre rezolvare

1. Se citeste un sir de caractere de la tastatura. Sa se scrie un program C++ care sa


verifice daca sirul dat este palindrom sau nu. Numim palindrom un cuvant care citit de
la stanga la dreapta si de la dreapta la stanga obtinem acelasi rezultat.

2. Se citesc doua texte de la tastatura. Sa se scrie un program C++ care sa afiseze


toate cuvintele comune din cele doua texte.

3. Se citesc doua cuvinte de la tastatura. Sa se scrie un program C++ care sa verifice


daca cele doua cuvinte se obtin unul din celalalt prin permutarea cuvintelor.

4. Se citeste un text de la tastatura. Sa se scrie un program C++ care sa afiseze


frecventele de aparitii ale tututor caracterelor din textul dat.

5. Se citeste un text de la tastatura. Sa se scrie un program C++ care sa determine


grupurile de trei vocale din textul dat.

6. Sa se afiseze unul sub altul, toate sufixele proprii ale unui cuvant citit de la tastatura
(sufixele unui cuvant sunt compuse din minim un caracter si maxim toate caracterele,
citite de la dreapta la stanga).
Exemplu : Fie cuvantul ‘limbaj’, sufixele cuvantului dat sunt : ‘j’, ‘aj’, ‘baj’, ‘mbaj’,
‘imbaj’, ‘limbaj’.

7. Sa se detecteze prima si ultima aparitie a unui caracter intr-un sir de caractere.

8. Se da un cuvant, format din maxim 30 de litere mici. Sa se codifice acest cuvant in


limba pasareasca, adica dupa fiecare vocala sa se adauge grupul de litere format din
caracterul ‘p’ urmat de vocala respectiva. Sa se afiseze cuvantul obtinut dupa
codificare.
Exemplu : Fie cuvantul = ‘informatica’, dupa codificare obtinem
‘ipinfopormapatipicapa’.
Se observa grupurile formate din caracterul ‘p’ si vocala respectiva.