Documente Academic
Documente Profesional
Documente Cultură
13
Siruri de caractere
(tipul de date char)
Probleme rezolvate:
Solutii:
Problema 1:
Sa se scrie un program care calculeze si sa afiseze lungimea unui sir de
caractere, citit de la tastatura.
#include<iostream.h>
int main(void)
{
char s[30];
int l,i=0;
cout<<"Dati sirul de caractere ";
cin.getline(s,300);
while(s[i]!=0) i++;
cout<<"Numarul de caractere ale sirului este "<<i;
}
1
Problema 2:
Scrieti un program care citeste un sir de caractere si transforma sirul in sir cu
litere mici.
#include<iostream.h>
int main(void)
{
char s[100];
int l,i=0;
cout<<"Dati sirul de caractere: ";
cin.getline(s,100);
while(s[i]!=0)
{
if( (s[i]>=65) && (s[i]<=90) ) s[i]=s[i]+32;
i++;
}
cout<<"Sirul transformat in litere mici este: "<<s;
}
2
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>
int main(void)
{
char s[30];
int l,i,j;
cout<<"Dati sirul de caractere ";
cin.getline(s,30);
cout<<"Prefixele sirului dat sunt : "<<endl;
i=0;
while(s[i]!=0)
{
for(j=0;j<=i;j++) cout<<s[j];
cout<<endl;
i++;
}
}
3
Problema 4:
#include<iostream.h>
int main(void)
{
char s[30],t[30];
int l,i,j;
cout<<"Dati primul sir de caractere ";
cin>>s;
cout<<"Dati al doilea sir de caractere ";
cin>>t;
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]) )
cout<<s<<" rimeaza cu "<<t;
else cout<<s<<" NU rimeaza cu "<<t;
}
4
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>
int main(void)
{
char s[50];
int voc=0, cons=0,i;
cout<<"Dati sirul de caractere "; cin.getline(s,50);
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;
}
5
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<string.h>
#include<stdio.h>
char s[256],c;
int i,j;
int main(void)
{
cout<<"Introduceti sirul = ";cin.getline(s,256);
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;
}
6
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>:
1. Functia strlen(s) – returneaza lungimea sirului dat ca parametru
2. Functia strstr(s1, s2) – returneaza pozitia unde apare subsirul s2
in sirul s1
3. Functia strcpy(s1, s2) – copiaza sirul s2 in sirul s1
#include<iostream.h>
#include<string.h>
#include<stdio.h>
char sir[100],subsir[25],*p;
int lung_subsir;
int 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;
}
7
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>:
1. 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
2. Functia strcpy(s1, s2) – copiaza sirul s2 in sirul s1
#include<iostream.h>
#include<string.h>
char cuvinte[10][25],temp[25];
int i,n,gasit=1;
int main(void)
{
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;
}
8
Execuția programului pe o serie de date de test:
9
Probleme propuse spre rezolvare
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’.
Exemplu:
Fie cuvantul = ‘informatica’, dupa codificare obtinem
‘ipinfopormapatipicapa’.
10