Documente Academic
Documente Profesional
Documente Cultură
Sir Caractere PDF
Sir Caractere PDF
Limbajul C++
Adrian Runceanu
Laborator nr. 7
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.
6. Sa se scrie un program care determina de cate ori apare un anumit
caracter intr-un sir de caractere.
7. Sa se scrie un program care sterge toate aparitiile unui subsir din cadrul
unui sir.
8. Se citesc n cuvinte. Se cere sa se ordoneze alfabetic.
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;
}
Execuia programului pe o serie de date de test:
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;
}
Execuia programului pe o serie de date de test:
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++;
}
}
Execuia programului pe o serie de date de test:
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 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;
}
Execuia programului pe o serie de date de test:
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;
}
Execuia programului pe o serie de date de test:
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;
}
Execuia programului pe o serie de date de test:
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;
}
Execuia programului pe o serie de date de test:
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;
}
10