Sunteți pe pagina 1din 18

1) Se da un sir de caractere. Sa se scrie o functie (in program) care sa numere de cate ori apare caracterul A intr-un sir.

2) Se da o fraza (mai multe propozitii separate de .,!,?). Sa se afle cate propozitii sunt in fraza. 3) Sa se incerce functiile predefinite. 4) Se citeste un text. Sa se scrie o functie (in program) care sa elimine spatiile. Se citeste un text. Sa se rearanjeze literele in ordine alfabetica, pastrand locul cuvintelor. Numai literele sunt afectate, celelalte caractere raman neschimbate. 5) Se citeste un text. Sa se rearanjeze literele in ordine alfabetica, pastrand locul cuvintelor. Numai literele sunt afectate, celelalte caractere raman neschimbate.

Ex: Ana_are_3_ani.

Aaa_aei_3_nnr.

6) 7) 8) 9)

Se citeste un text. Sa se afiseze toate cuvintele din text formate din k caractere. Se citeste un text. Sa se afiseze toate cuvintele de lungime maxima. Se dau doua numere sun forma de siruri de caractere. Sa se afle suma si diferenta. Sa se verifice daca doua cuvinte se pot obtine unul din celalalt prin permutarea

literelor circular la stanga. 10) Se da un sir de caractere care contine cuvinte separate de spatiu. Sa se afiseze

distributia lungimii cuvintelor in sir. Ex : s = Toamna_aceasta_ploua_foarte_tare_desi_nu_prea imi_place_acest_lucru

1 cuvant de lungime 2 13 34

11)

Se citeste un cuvant. Sa se afle toate prefixele cuvantului. a,an,ani animal

Ex: animal

12) 13)

Se citesc de la tastatura n linii de text. Sa se afiseze linia de text cea mai lunga. Se da un fisier input.txt care contine o fraza. Sa se elimine din fraza vocalele si sa

se afiseze ce a mai ramas in output.txt.

14)

Se da un fisier care contine un sir de caractere. Sa se mareasca toate numerele care

apar in sir cu 12%. Afisarea se face in alt fisier. 15) In fisierul p.in se afla un text. Sa se afiseze cuvintele din text care incep si se Se citeste un text de la tastaura. Inlocuiti in text fiecare vocala cu p. Se da o matrice patrata cu n linii si n coloane. Scrieti o functie (in program) care

termina cu aceeasi litera. 16) 17)

calculeaza de cate ori apare o valoare data x, deasupra diagonalei principale. 18) : !, ?, ;, . Sa se afle: a. b. cate propozitii sunt in text in fiecare propozitie cate cuvinte sunt 19)Se da o matrice patratica nxn. Sa se scrie o functie care sa calculeze cate numere prime sunt sub diagonala principala. Se citeste un sir de caractere dintr-un fisier care contine cuvinte separate de spatiile

Siruri de caractere

1) tablou unidimensional cu elemente de tip character : char nume [dimensiune]. Obs: - caracterele se numeroteaza incepand cu pozitia 0 pana la dimensiune -1. - orice sir de caractere se termina cu un marcator de sfarsit \0 (numit si caracterul nul) : AA

A\0

- sirurile de caractere sunt cuprinse intre ghilimele

Ex :

char s[100]; char a[30]; a=iarna a[0].a[4] 29

i 0

a 1

r 2

n 3

a 4

\0 5

2) pointer catre tipul char :

char * p; p = vara;

Citirea

a) cin>>nume; Ex: char a[20]; cin>> a; b) char a[20]; int n; cin>>n; for (i=0;i<n;i++) cin>>a[i]; c) gets (nume) Ex: gets(a) Citirea cu gets : se pot citi siruri care sa contina spatii, citirea facandu-se pana la apasarea tastei enter. Citirea cu cin a unui sir de caractere se opreste la intalnirea unui spatiu.

Scrierea a) cout<<nume; Ex: char a[10]; a=set; cout<<a; b) puts (nume); Ex: char a[10]; a=set; puts(a); Ex: #include<iostream.h> #include<string.h> main() { char a[]=exemplu,*p; //vector de caractere si pointer catre tipul char p=a; cout<<p<<endl; //va afisa exemplu p++; cout<<p<<endl; //va afisa xemplu p++; cout<<p<<endl; //va afisa emplu cout<<p[1]<<endl; // va afisa m cout<<p-a; // va afisa 2

Obs : prin p-a se obtine indicele in vectorul a al primului octet al vectorului retinut de p.

Functii predefinite

1) Lungimea sirului de caractere : strlen(s) Ex: #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> char s[30]; unsigned L; main() {

afla lungimea sirului s

cout<<dati sirul:;gets(s); L=strlen(s); cout<<lungimea sirului este:<<L; getche(); }

2) Copierea: strycpy(s1,s2) Ex: s1 =ABC s2 =abcd; strcpy(s1,s2); s1 =abcd copiaza sirul s2 in s1 si returneaza sirul s1 modificat

3) Concatenarea (alipirea a doua siruri de caractere) strcat(s1,s2) Ex: s1=Ana; s2=Maria; strcat(s1,s2); s1=AnaMaria concateneaza s1 si s2 formand un sir de caractere ce se va pastra in s1

strncat(s1, s2, n) Ex: s1=Haina; s2=_Albastra; strncat(s1, s2, 5);

adauga la sfarsitul sirului si primele n caractere din sirul s2

s1=Haina_Alba

4) Compararea strcmp(s1, s2) 1, daca s1> s2; 0, daca s1= s2; -1, daca s1< s2. compara sirul s1 cu s2 s returneaza:

Obs: comparatia se face caracter cu caracter din cele doua siruri. Rezultatul e dat de prima discrepanta pe care o gaseste si depinde de pozitia caracterelor in setul ASCII precum si de lungimea sirilor de caractere.

Ex: s1=ABC; s2=ABCD; cout<<strcmp(s1,s2); -1 s1=ABC s2=ABC cout<<strcmp(s1,s2); 0

s1=ABC; s2=AACDE; cout<<strcmp(s1,s2); 1

stricmp(s1,s2) Ex: s1=ABC; s2=abc;

compara sirul s1 cu s2 si ignora daca avem litere mari sau mici

cout<<stricmp(s1,s2);

strncmp(s1,s2,n) Ex: s1=ABab; s2=abAB;

compara primele n caractere din sirurile s1 si s2

-1

cout<<strncmp(s1,s2,2);

strnicmp(s1,s2,n)

compara primele n caractere din s1 si s2 si ignora literele mari si mici.

5) Cautarea strchr(s,c) Ex: strchr(A,TATA); cauta caracterul c in sirul s incepand cu prima pozitie

strrchr(s,c) Ex: strrchr(TATA,A);

cauta caracterul c in sirul s incepand de la sfarsit

Obs: rezultatul este subsirul care incepe cu prima aparitie a caracterului citit Ex: #include<iostream.h> #include<string.h> void main() { char a[20]=aceasta este; cout<<strrchr(a,t); cout<<strrchr(a,t)-a; } va tipari : te va tipari : 10 cout<<strchr(a,t); cout<<strchr(a,t)-a; va tipari : ta este va tipari : 5 (indicele primei aparitii a lui t in a)

6) Transformari (conversii) strlwr(s) strupr(s) transforma literele mari din sirul s in litere mici transforma literele mici din sirul s in litere mari

Ex: char*s=aBcd; strupr(s); cout<<s; afiseaza ABCD char*s=AbCD; strlwr(s); cout<<s; afiseaza abcd

atoi(s)

transforma sirul de caractere s intr-un numar intreg

Ex: int n1,n2,n3,n4,n5,n6; n1=atoi(123); n2=atoi( 123); n3=atoi(123a34); n4=atoi(123.45); n5=atoi(123.3422); n6=atoi(anc123); n1=123 n2=123 n3=123 n4=123 n5=123 n6=0

atol(s) Ex:

transforma sirul de caractere s intr-un intreg de tipul long

long n=atoll(1234567)

n=1234567

atof(s) Ex:

transforma sirul de caractere s intr-un numar real de tip double

double n1,n2,n3,n4,n5; n1=atof(123); n2=atof(123a34); n3=atof(123.45); n4=atof(123.34e2); n5=atof(anc123); n1=123 n2=123 n3=123.45 n4=12334 n5=0

itoa(n,sir,baza)

transforma numarul intreg de tip int, n, intr-un sir de caractere.

Valoarea baza indica baza de numeratie catre care se face conversia

Ex: char s[20]; itoa(234,s,10); cout<<s; va afisa 234 char*s; itoa(10,s,2); cout<<s; va afisa 1010 (scrierea lui 10 in baza 2)

ltoa (n,sir,baza)

transforma numarul intreg de tip long, n, intr-un sir de caractere. Valoarea

baza indica baza de numeratie catre care se face conversia. Ex: char s[20]; ltoa(123456,s,10); cout<<s; va afisa 123456

Obs: Functiile atoi, atol, atof, itoa, ltoa au prototip in stdlib.h

7) Aflare subsiruri strtok(s1,s2) scoate din s1 un subsir pornind de la inceput si oprindu-se la primul separator

pe care-l intalneste precizat in s2;

Ex: s1=Ana_are_mere; s2=_; cout<<strtok(s1,s2); se afiseaza Ana

Obs: - rezultatul returnat de functie se pastreaza intr-un sir de caractere declarat ca pointer. - se considera ca sirul s1 e alcatuit din mai multe entitati separate prin caractere cu rol de separator.

Functia strtok are urmatorul principiu de executie : - la prima apelare functia are forma strtok(s1,s2) si intoarce prima entitate - urmatoarele apeluri ale functiei au forma strtok (NULL,s2) si intorc de fiecare data prima entitate ramasa.

Ex: Sa se afle toate cuvintele dintr-o fraza in care cuvintele sunt separate prin _.

#include <iostream.h> #include <conio.h> #include <stdio.h> char s[20],*p; void main() { cout<<dati sirul; gets(s); p=strtok(s,_); cout<<p; while(p) { p=strtok(NULL,_); cout<<p; } }

Probleme

1) Se da un sir de caractere. Sa se scrie o functie (in program) care sa numere de cate ori apare caracterul A intr-un sir.

#include<iostream.h> #include<stdio.h> #include<string.h> char s[30]; int numar() { int i,k=0; for (i=0;i<strlen(s);i++) if (s[i]= =A)k++; return k; }

void main() { gets(s); cout<<numar(); getche(); }

2) Se da o fraza (mai multe propozitii separate de .,!,?). Sa se afle cate propozitii sunt in fraza. #include<iostream.h> #include<stdio.h> #include<string.h> char s[30]; int k; void main() { gets(s); k=0; for (i=0; i<strlen(s); i++) if ((s[i]= =.)||(s[i]= = !)||(s[i]= =?))k++; cout<<k; }

3) Sa se incerce functiile predefinite.

#include<iostream.h> #include<string.h> #include<stdio.h> #include<conio.h> char s1[30],s2[30]; int n; char c; void main() { gets(s1); gets(s2); cin>>n; cin>>c; cout<<strlen(s)=<<strlen(s)<<endl; cout<<strcpy(s1,s2)=<<strcpy(s1,s2)<<endl; cout<<strcat(s1,s2)=<<strcat(s1,s2)<<endl; cout<<strncat(s1,s2,n)=<<strncat(s1,s2,n)<<endl; cout<<strcmp(s1,s2)=<<stricmp(s1,s2)<<endl; cout<<strncmp(s1,s2,n)=<<strcnmp(s1,s2,n)<<endl; cout<<strchr(s1,c)=<<strchr(s1,c)<<endl . } pt getche()

10

4) Se citeste un text. Sa se scrie o functie (in program) care sa elimine spatiile.

char s1[100], s2[100]; void elimin() { char * p; p=strtok(s1,_); strcpy(s2,p); while(p) { p=strtok(NULL,_); // de cate ori gasesc cate o entitate, o alipesc la s2 strcat(s2,p); } } void main() { gets(s1); elimin(); puts(s2); } //copiez in s2 prima entitate gasita in sirul s1

5) Se citeste un text. Sa se rearanjeze literele in ordine alfabetica, pastrand locul cuvintelor. Numai literele sunt afectate, celelalte caractere raman neschimbate.

Ex: Ana_are_3_ani.

Aaa_aei_3_nnr.

char s1[100], s2[100] void ordonez() { int i,j; for (i=0; i<=strlen(s1)-2;i++) for (j=i+1; j<=strlen(s1)-1;j++) ..

11

6)Se citeste un text. Sa se afiseze toate cuvintele din text formate din k caractere.

char s[100], *p; int k; void main() {gets(s); cin>>k; p=strtok(s,_); if (strlen(p)= =k) cout<<p; while (p) {p=strtok(NULL,_); if(strlen(p)= =k)cout<<p; } }

7) Se citeste un text. Sa se afiseze toate cuvintele de lungime maxima. char s[100], a[100][100], *p; // vector de cuvinte ( matrice : a[k] cuvant de tipul char[100] ) //Se pot scrie mai multe siruri de cuvinte daca declaram o matrice de tip char int max; void main() { gets(s); int k=0; p=strtok(s,_); k++; strcpy(a[k],p); //in a[k] se introduc pe rand secventele (cuvintele din text) while(p){p=strtok(NULL,_) k++; strcpy(a[k],p); } max=0; int i; for (i=1,i<=k;i++) if (max<strlen(a[i])) max=strlen(a[i]); for (i=1; i<=k;i++) if (strlen (a[i])= =max) cout<<a[i]<<endl; }

12

8) Se dau doua numere sub forma de siruri de caractere. Sa se afle suma si diferenta.

#include<iostream.h> #include<string.h> #include<stdio.h> #include<conio.h> char s1[20],s2[20]; int n1,n2; void main() { gets(s1);gets(s2); n1=atoi(s1); n2=atoi(s2); cout<<suma=<<n1+n2; cout<<diferenta=<<n1-n2; }

9) Sa se verifice daca doua cuvinte se pot obtine unul din celalalt prin permutarea literelor circular la stanga. Ex: s1 = arc Obs: nr de permutari=nr de litere din s1 la fiecare permutare se obtine un cuvant pe care-l comparam cu s2 s2 = car

char s1[100], s2[100], aux; void main() { gets(s1); gets(s2); int i,j,b=0; for (i=1;i<=strlen(s1);i++) {aux=s1[0]; for (j=1; j<=strlen(s1)-1,j++) s1[j-1]=s1[j]; s1[strlen(s1)-1]=aux; if (strcmp(s1,s2)= =0) b=1; } if (b= =1) cout<<da; else cout<<nu;} ................................. s1[n-2] s1[n-1] s1[n-1] aux daca strlen(s1) = n, avem: aux s1[0] s1[0] s1[1]

13

10. Se da un sir de caractere care contine cuvinte separate de spatiu. Sa se afiseze distributia lungimii cuvintelor din sir. Ex.: s= Toamna _acesta_ploua_foarte_tare_desi_nu_prea_imi_place_acest_lucru

1 cuvant de lungime 2 1 cuvant de lungime 3 3 cuvant de lungime 4 4 cuvant de lungime 5 2 cuvant de lungime 6 1 cuvant de lungime 7

- Se citeste sirul. - Se scot cuvintele si se posteaza intr-un vector a - In vectorul v se posteaza lungimea fiecarui cuvant - Se ordoneaza vectorul crescator si se numara cate cuvinte din din vectorul a au lungimea v[i]

Char s1[100], a[100][100] , *p; int v[100] ; void main ( ) { gets (s1) ; int k=0 , i , j , aux ; p=strtok(s, _) ; k++ strcpy (a[k], p); v[k]=strlen(p);

vector de cuvinte ( matrice : a[k] cuvant de tipul char[100] )

- Se genereaza vectorii a si v

while (p) { p=strtok(null , _); k++; strcpy(a[k],p); v[k]=strlen(p); } for (i=1 ; i<=k-1 ; i++) for (j=i+1 ; j<=k ; j++) if (v[i]>v[j]) { aux=v[i]; v[i]=v[j]; v[j]=aux; }; for (i=1 ; i<=k ; i++) { int nr=0; for (j=1 ; j<=k; j++) if (strlen(a[j]==v[i]) nr++; coutt<<nr<<cuvinte de lungime <<v[i]<<endl;}} - Numaram cate cuvinte din vect. a sunt egale cu v[i] , i=1,k - Se ordoneaza vectorul v

14

11. Se citeste un cuvant . Sa se afiseze toate prefixele cuvantului . Ex.: animal a , an , ani , anim , anima , animal

char s[20]; int i,j void main ( ) { gets(s); for ( i=0 ; i<=strlen(s)-1 ; i++) { for (j=0 ; j<=i ; j++) cont <<s[j]<< _; cout <<endl : } }

12. Se citesc de la tastatura n linii de text. Sa se afiseze linia de text cea mai lunga .

char s[100] , ss[100]; int n , max , i ; void main ( ) { cin>>n ; max=0 ; For (i=1 ; i<=n ; i++) { gets(s); if (strlen(s)>max){max=strlen(s); strcpy(ss,s); } } cout<<ss<<endl; }

13. Se da un fisier input.txt care contine o fraza. Sa se elimine din fraza vocalele si sa se afiseze ce a ramas in output.txt .

char s[100];

15

int i,n; void main( ) { ifstream f(input.txt); ofstream g(output.txt); f.getline(s,100); for (i=0 ; i<=strlen(s)-1; i++) if (strchr(BC____Zbc__z,s[i] )) g<<s[i]; f.close( ) ; g.close( ) ; } scriere in fisier : f<<sir; citire din fisier: f>>sir sau f.getline(s,nr)

14. Se da un fisier care contine un sir de caractere . Sa se mareasca toate numerele care apar in sir cu 12%. Afisarea se va face in alt fisier .

char s[100] , *p ; Void main( ) { ifstream f(sir.txt); ofstream g(sirnr.txt); f.getline(s,100); p=strtok(s,_); if (atoi(p)) g<<112/100*atoi(p)<<_ ; while (p) { p=strtok(NULL, _); if (atoi(p)) g<<112/100*atoi(p)<<_ ; } f.close( ); g.close( ) ; }

15. Sa se afiseze cuvintele din textul s care incep si se termina cu aceeasi litera .

char s[100], *p ; gets(s);

16

void cuvinte( ) { p=strtok(s,_) ; if (p[o]==p[strlen(p)-1]) cout <<p<<_ ; while (p) { p=strtok (NULL,_) ; if(p[o]= =p[strlen(p)-1]) cout<<p<<_ ; } void main( ) {; cuvinte( ) ; } 16. Se citeste un text de la tastatura . Inlocuiti in text fiecare vocala cu p .

void (main) { char s[100], b[100] , voc[10]=AEIOUaeiou; int i;gets(s) ; for (i=o; i<=strlen(s)-1; i++) if (strchr(voc, s[i])) { strcat (b , a[i]) ; strcat (b , p) ; strcat (b , a[i]) ; } else strcat(b,a[i]) cout << b;} 17. Se da o matrice patrata cu n linii si n coloane . Scrieti o functie (intr-un program) care calculeaza de cate ori apare o valoare data x , deasupra diagonalei principale.

#include < iostream.h > Int n , a[100][100], x ; void citire ( ) { int i, j ; for (i=1; i<=n ; i++) for (j=1; j<=n ; j++)

17

cin >>a[i][j] ; } int cautare ( ) { Int i ,j , k=0 ; for (i=1 ; j<=n-1 ; i++) for (j=i+1 ; j<=n ; j++) if ( a[i][j]= = x) k++ ; return k; } void main ( ) { cin>>n>>x ; citire; cout<<cautare( ); }

18

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