Sunteți pe pagina 1din 7

Probleme șiruri de caractere rezolvate

1.Enunț
Se citește un cuvânt format din litere mici. Să se afișeze cuvintele care se obțin prin
eliminarea succesivă a primei și ultimei litere din cuvântul citit.
Exemplu: Dacă se citește cuvântul alina se vor afișa:
alina
lin
i

Rezolvare
#include<iostream>
#include<cstring>
int main()
{
char a[100];
cin>>a;
while(strlen(a)>0)
{ cout<<a;
cout<<endl;
strcpy(a,a+1);
strcpy(a+strlen(a)-1,a+strlen(a));
}
return 0;
}

2.Enunț
Se citește un șir de caractere format din cel mult 100 de caractere. Să se numere și să se
șteargă vocalele din șir.
Exemplu: Pentru șirul abracadabra se afișează
5 brcdbr

Rezolvare
#include<iostream>
#include<cstring>
int main()
{
char a[101],v[]="aeiouAEIOU";
cin.get(a,100);
int i,k=0;
for(i=0;i<strlen(a);i++)
if (strchr(v,a[i])!=0)
{k++;
strcpy(a+i,a+i+1);
}
cout<<k<<" "<<a;
return 0;
}

3.Enunț
Se citește un cuvânt format din litere mici. Să se înlocuiască fiecare vocală mică din cuvânt cu
vocala mare corespunzătoare.
Exemplu: Cuvântul algoritm se va transforma în AlgOrItm.

Rezolvare
#include<iostream>
#include<cstring>

int main()
{ char v[]="aeiou";
char s[40];
int i;
cin>>s;
for(i=0;i<strlen(s);i++)
if(strchr(v,s[i])!=0) s[i]=s[i]+'A'-'a';
cout<<s;
}

4.Enunț.
Se citește un cuvânt s format din maxim 200 de litere mici. Să se elimine toate perechile de
câte 2 litere alăturate identice.
Exemplu: din annaaalina se obține lina

Rezolvare
#include<iostream>
#include<cstring>
int main()
{ char s[200];
int i=0;
cin>>s;
while(i<strlen(s)-1)
{ if(s[i]==s[i+1])
{ strcpy(s+i,s+i+2);
if(i>0) i=i-1;
}
else i++;
}
cout<<s;
}

5.Enunț.
Se citește un text scris cu litere mici și spații. Să se înlocuiască în fiecare cuvânt din text
prima și ultima literă cu literele mari corespunzătoare.
Exemplu: ana are mere => AnA ArE MerE

Rezolvare
#include <iostream>
#include <stdlib.h>

using namespace std;


int main()
{
char s[50],aux;
int i;
cin.get(s,60);
s[0]=s[0]-32;
for(i=1;i<strlen(s)-1;i++)
if(s[i]!=' ' && (s[i+1]==' ' || s[i-1]==' ')) s[i]=s[i]-32;
s[strlen(s)-1]=s[strlen(s)-1]-32;
cout<<s;
return 0;
}

6.Enunț
Se citesc 2 cuvinte a și b. Să se determine dacă sunt anagrame, afișându-se da sau nu. Două
cuvinte sunt anagrame dacă au aceleași litere, dar în altă ordine.

Rezolvare
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
char a[30],b[30];
cin>>a>>b;
if(strlen(a)!=strlen(b)) cout<<"nu";
else
{
int ok=1;
while(strcmp(a,b)!=0 && ok)
{
if(strchr(b,a[0])!=0)
{
strcpy(strchr(b,a[0]), strchr(b,a[0])+1);
strcpy(a,a+1);
}
else ok=0;
}
if(ok) cout<<"da";
else cout<<"nu";
}
return 0;
}

7.Enunț
Un text are cel mult 100 de caractere și este format din cuvinte şi numere, separate prin câte
un spațiu. Cuvintele sunt formate numai din litere ale alfabetului englez. Toate numerele sunt
reale şi sunt formate numai din parte întreagă sau din parte întreagă şi parte fracţionară,
separate prin virgulă (,), numerele negative fiind precedate de semnul minus (-).
Scrieţi un program C/C++ care citeşte de la tastatură textul, pe care îl transformă, eliminând
din componenţa sa toate numerele negative. Programul afişează apoi pe ecran textul obţinut.
Exemplu: pentru textul
2,7 minus 3,5 minus 2 egal 2,7 plus -3,5 plus -2 egal -0,2 rezultat
se va afişa pe ecran textul:
2,7 minus 3,5 minus 2 egal 2,7 plus plus egal rezultat

Rezolvare
#include <iostream>
#include <cstring>
using namespace std;

int main()
{ char s[100],*p,v[100][100],t[100];
int n,i;
cin.get(s,100);
n=0;
p=strtok(s," ");
while(p)
{
n++;
strcpy(v[n],p);
p=strtok(NULL," ");
}
strcpy(t,"");
for(i=1;i<=n;i++)
{if(strchr(v[i],'-')==0)
strcat(t,v[i]);strcat(t," ");}
cout<<t;
return 0;
}

8.Enunț
Un text cu cel mult 100 de caractere conține cuvinte și numere, separate prin câte un spațiu.
Cuvintele sunt formate numai din litere mici ale alfabetului englez, iar numerele sunt reale,
pozitive, cu partea zecimală și partea întreagă separate prin simbolul virgulă, sau numai cu
partea întreagă, ca în exemplu. Scrieți un program C/C++ care citește de la tastatură un text de
tipul precizat și afișează pe ecran numărul de valori întregi din text.
Exemplu: pentru textul
grus leucogeranus are 1,40 m inaltime si traieste intre 30 si 40 de ani
se afișează pe ecran 2

Rezolvare
#include <iostream>
#include <cstring>
using namespace std;
int numar(char s[100])
{ int ok=1,i;
for(i=0;i<strlen(s);i++)
if(s[i]<'0' || s[i]>'9') ok=0;
return ok;
}
int main()
{ char s[100],*p;
int k;
cin.get(s,100);k=0;
p=strtok(s," ");
while(p)
{
if(numar(p)==1) k++;
p=strtok(NULL," ");
}
cout<<k;
return 0; }

9.Enunț
Într-un text cu cel mult 100 de caractere, cuvintele sunt formate din litere mici ale alfabetului
englez și sunt separate prin câte un spațiu. Scrieți un program C/C++ care citește de la
tastatură un text de tipul menționat și afișează pe ecran, pe linii separate, toate cuvintele sale
pentru care numărul de vocale este strict mai mic decât numărul de consoane. Dacă nu există
niciun astfel de cuvânt, se afișează pe ecran mesajul nu exista. Se consideră vocale literele din
mulțimea a, e, i, o, u.
Exemplu: pentru textul ei au plantat tamarix ea a adus iasomie
se afișează pe ecran, nu neapărat în această ordine, cuvintele alăturate: plantat și tamarix

Rezolvare
#include <iostream>
#include <cstring>
using namespace std;
void verific(char s[250],int &nrv,int &nrc)
{
char voc[250];
int i;
strcpy(voc,"aeiou");
nrv=0;nrc=0;
for(i=0;i<strlen(s);i++)
if(strchr(voc,s[i])!=0) nrv++;
else nrc++;
}
int main()
{
char s[250],*p;
int n1,n2,k;
cin.get(s,250);
k=0;
p=strtok(s," ");
while(p)
{
verific(p,n1,n2);
if(n1<n2) {cout<<p<<endl;
k=1;}
p=strtok(NULL," ");
}
if(k==0) cout<<"nu exista";
return 0;
}

10.Enunț
Se consideră fișierul prosir.in care conține pe primul rând un text format din cel mult 199 de
caractere litere mici și spații. Cuvintele din text sunt separate prin unul sau mai multe spații.
Să se modifice textul citit din fișier prin înlocuirea ultimei litere a fiecărui cuvânt cu cifra 5.
Exemplu
prosir.in
ana are multe mare si o gutuie.
prosir.out
an5 ar5 mult5 mar5 s5 5 gutui5.

Rezolvare
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prosir.in");
ofstream g("prosir.out");
int main()
{
int i;
char s[205];
f.getline(s,205);
for (i=0;i<strlen(s)-1;i++)
if ((s[i]>='a'&&s[i]<='z')&&!(s[i+1]>='a'&&s[i+1]<='z'))
s[i]='5';
g<<s;
}

11.Enunț
Se dă o propoziție formată din litere mari și mici ale alfabetului englez, cifre, spații și semne
de punctuație, în care literele mari și mici se consideră identice. Determinați vocala din șir cu
număr maxim de apariții. șirul citit va avea cel mult 255 caractere. Dacă în șir există mai
multe vocale cu număr maxim de apariții, se va afișa prima în ordine alfabetică.
Exemplu
Ana are 5 mere si trei nuci
Se afișează
E

Rezolvare
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n,i,j,v[100],p,k,maxim;
char s[255],voc[10],voc2[10];
cin.get(s,255);
strcpy(voc,"aeiou");
strcpy(voc2,"AEIOU");
n=strlen(s);
k='a'-'A';
for (i=0;i<n;i++)
if (strchr(voc,s[i]))
s[i]=s[i]-k;
for (i=0;i<=4;i++)
v[i]=0;
for (i=0;i<n;i++)
if (strchr("AEIOU",s[i]))
{
p=strchr("AEIOU",s[i])-"AEIOU";
v[p]=v[p]+1;
}
maxim=0;
for (i=0;i<=4;i++)
if (v[i]>maxim)
maxim=v[i];
for (i=0;i<=4;i++)
if (v[i]==maxim)
{cout<<voc2[i];break;}
return 0;
}

S-ar putea să vă placă și