Exercitii rezolvate stringuri

Precizați care ar fi efectul executării secvențelor de cod următoare !

1. În secvenţa de instrucţiuni de mai jos, variabila s memorează un şir de caractere format doar din litere ale alfabetului englezesc, iar variabilele i şi n sunt de tip int. Ştiind că în urma executării secvenţei s-a afişat succesiunea de caractere „eied*eael*”, scrieţi care este şirul de caractere memorat de variabila s.

n=strlen(s); for(i=0;i<n;i++) if (s[i]==’e’) cout<<’*’; else cout<<'e'<<s[i];

Soluție: se observă că secvența înlocuiește fiecare caracter ’e’ prin asterix, iar pentru celelalte caractere determină afișarea caracterului ‘e’ înainte. Prin urmare, șirul inițial este: „ideale”.

2. Ce se afişează în urma executării secvenţei de program de mai jos dacă variabila s memorează şirul de caractere „abcdefgh”?

strcpy(s+2,s+4); cout<<s<<” ”<<strlen(s);

Soluție: secvența determină copierea subșirului ce începe de la al 4-lea caracter peste subșirul ce începe de la de al 2-lea caracter. Prin urmare, rezultatul afișat va fi: „abefgh6"

3. Se consideră declararea:

char s[50], x[50]; Ce se afişează în urma executării secvenţei de program scrisă mai jos, dacă variabila s memorează şirul „abcdefg”?

strcpy(x,s+4); strcpy(s+4,”123”); strcat(s,x); cout<’9’) cout<<s[i];

Soluție: bac

B. Scrieți programe C++ pentru rezolvarea următoarelor probleme !

1. Se citeşte de la tastatură un cuvânt format din cel mult 100 de caractere, litere mici și mari ale alfabetului. Programul determină transformarea cuvântului citit prin înlocuirea fiecărei vocale a cuvântului printr-un şir format din trei caractere şi anume: vocala respectivă urmată de litera p și, apoi, încă o dată vocala respectivă, ca în exemplul dat mai jos. Programul afişează pe ecran cuvântul obţinut. Se consideră vocale literele din mulţimea {a,e,i,o,u, A, E, I, O, U}.

Exemplu: pentru cuvântul „caracter” se va afişa pe ecran: „caparapacteper”.

Soluție:

using namespace std; int main { char s[100], voc[10], aux[100]; //initilizam sirul voc cu sirul vocalelor strcpy(voc,"aeiouAEIOU"); cin.getline(s,100); for(int i=0;i<strlen(s);i++) //functia strchr determina pointerul primei aparitii a caracterului s[i] in sirul //vocalelor sau returneaza valoarea NULL, in caz nefavorabil if(strchr(voc,s[i])) { //copiem in aux subsirul ce incepe de la caracterul cu indicele i strcpy(aux,s+i+1); s[i+1]='p'; s[i+2]=s[i]; //lipim inapoi in s subsirul copiat anterior, dupa ce am inserat //caracterele cerute in enunt strcpy(s+i+3,aux); i+=2; } cout<<s; return 0;} 2. Se consideră un text cu maximum 255 de caractere în care cuvintele sunt separate prin unul sau mai multe spaţii. Primul caracter din textul citit este o literă, iar cuvintele sunt formate numai din litere mici ale alfabetului englez. Scrieţi un program C++ care citeşte de la tastatură textul şi îl transformă, înlocuind prima literă a fiecărui cuvânt cu litera mare corespunzătoare, restul caracterelor rămânând nemodificate. Textul astfel transformat va fi afişat pe ecran.
 * 1) include
 * 1) include

Exemplu: dacă de la tastatură se introduce textul: „toamna se numara bobocii" se va afişa pe ecran: „Toamna Se Numara Bobocii".

Soluție: 

using namespace std; int main { char s[255]; int i; cin.getline(s,100); s[0]=s[0]-('a'-'A'); for(int i=1;i<strlen(s);i++) if(s[i]==' ') { while(s[i]==' ')i++; s[i]=s[i]-('a'-'A'); } cout<<s; return 0; } 3. Scrieţi un program în limbajul C++ care citeşte de la tastatură două şiruri, formate fiecare din cel mult 20 de caractere. Primul şir reprezintă numele unei persoane, iar al doilea şir reprezintă prenumele aceleiaşi persoane. Atât numele cât şi prenumele sunt formate numai din litere ale alfabetului englezesc şi fiecare conţine cel puţin o consoană. Programul construieşte în memorie şi afişează pe ecran un al treilea şir de caractere, care conţine consoanele din prenumele citit dispuse în ordinea în care apar în prenume urmate de exact un spaţiu şi de numele citit.
 * 1) include
 * 1) include

Exemplu: dacă primul şir citit este „Mihai”, iar al doilea este „Popa” se va construi şi apoi se va afişa pe ecran şirul „Mh Popa”.

Soluție:

#include using namespace std; int main { char nume[20], prenume[20], numecomplet[40], vocale[]={"aeiou"}; int i; cin.getline(nume,20); cin.getline(prenume,20); for(int i=0;i

Exemplu: dacă șirul este „Anul acesta fiica cea mare va merge la mare ” și se dorește înlocuirea cuvântului “mare” prin cuvântul “mica” se va construi şi apoi se va afişa pe ecran şirul „Anul acesta fiica cea mica va merge la mica”.

Soluție:

using namespace std; int main{ char text[250],cuvant1[20],cuvant2[20],auxiliar[250]; char *poz; cout<<"Introduceti textul: "; cin.getline(text,250); cout<<"\n Introduceti cuvantul cautat: "; cin.getline(cuvant1, 20); cout<<"\n Introduceti cuvantul substitut: "; cin.getline(cuvant2, 20); while(poz=strstr(text,cuvant1)) { strcpy(auxiliar,poz+strlen(cuvant1)); strcpy(text+(poz-text), cuvant2); strcat(text, auxiliar); } cout<

Soluție:

using namespace std; int main { int nrap=0,i=0,j,k,poz;char s[255], aux[100], voc[]="aeiou"; cin.getline(s,255); strcpy(aux, " "); strcat(aux,s); strcpy(s, aux); s[strlen(s)+1]=NULL; s[strlen(s)]=' '; i=0; while(i