Documente Academic
Documente Profesional
Documente Cultură
int main ()
{
char sir [20] = "salutari";
printf("Șirul este: %s \n", sir);
return 0;
}
Următoarea declarație și inițializare creează un șir format din cuvântul "Salut".
Pentru a menține caracterul nul la sfârșitul matricei, dimensiunea matricei de
caractere care conține șirul este cu una mai mare decât numărul de caractere din
cuvânt "Salut".
char urare[6] = {′s′, ′a′, ′l′, ′u′, ′t′, ′\0′};
Afișare:
char urare[ ] = "salut";
Reprezentarea adreselor din spațiul de memoriei în care este localizat șirului definit
anterior. Index 0 1 2 3 4 5
Variabila S a l u t \0
Adresa 0x12341 0x12342 0x12343 0x12344 0x12345 0x12349
int main ( )
{
char urare[6] = {'S', 'a', 'l', 'u', 't', '\0'};
printf("Mesaj de salut: %s\n", urare);
return 0;
}
Un șir de caractere care nu conține alte caractere decât caracterul nul se numește
șirul nul.
Funcția strlen ( ) returnează 0 ca dimensiune a șirului nul.
Sintaxa char sir[10] = "";
Se pot executa toate operațiile specifice șirurilor, cu șirul nul (de copiere, de
concatenare, de comparare, ș.a.)
Șirul nul conține totuși un caracter, unul nul.
Șirul de caractere "" nu este același cu șirul de caractere " ", deoarece al doilea șir
conține două caractere, un spațiu și un nul.
• Antetul string.h acceptă toate funcțiile string în limbajul C.
• C acceptă o gamă largă de funcții care manipulează șirurile terminate cu NULL
(strcpy ( ), strcat ( ), strlen ( ))
#include <stdio.h> strcat (sir1, sir3);
#include <string.h> printf ("strcat (sir1, sir3): %s\n",
int main ( ) { sir1);
char sir1[12] = "Sarbatori"; /* lungimea totala a lui sir1 dupa
char sir2[12] = " "; concatenare */
char sir3[12] = "fericite!";; len = strlen (sir1);
char sir4[12]; printf ("strlen (sir1): %d\n", len);
int len; return 0;
/* copiaza sir1 in sir4 */ }
strcpy (sir4, sir1);
printf ("strcpy(sir4, sir1): %s\n",
sir4);
/* concateneaza sir1, sir2 */
strcat (sir1, sir2);
printf ("strcat(sir1, sir2): %s\n",
sir1);
/* concateneaza sir1, sir3 */
Un tablou de date este o colecție de variabile aparținând aceluiași tip de date.
Este posibilă stocarea unor valori de același tip de date într-o matrice.
• Matricea poate aparține oricăruia dintre tipurile de date
• Dimensiunea matricei trebuie să fie o valoare constantă.
• Întotdeauna, locațiile de memorie contigue (adiacente) sunt utilizate pentru a
stoca elementele unei matrice în memorie.
• Este recomandat să se inițializeze o matrice de zero sau nul, dacă nu i atribuie
nicio valoare matricei, sau dacă nu se știe câte elemente va cuprinde acea matrice.
• int a[10]; // matrice de tip de date integer
• char b[10];// matrice de tip de date caracter
În loc să se declare variabile individuale, ca numar0, numar1, ..., și numar99, se
declară o variabilă matrice, în forma numar[0], numar[1], și ..., numar[99] ca o
reprezentare a variabilelor individuale.
Un anumit element dintr-o matrice este accesat de un index.
Toate matricele constau din locații de memorie contiguă.
Adresa cea mai joasă corespunde primului element și cea mai mare adresă ultimului
element.
Numar[0] Numar[1] Numar[2] Numar[3] ...
Pentru a declara o matrice în C, trebuie specificat tipul elementelor și numărul
acestora.
type arrayName [arraySize];
Aceasta este o matrice unidimensională.
type poate fi orice tip de date valid în C
arraySize trebuie să fie o constantă întreagă mai mare decât 0.
balance[4] = 5.0;
0 1 2 3 4
balance
10.0 2.5 4.8 27.0 5.0
Un element este accesat prin indexarea numelui matricei.
Acest lucru se face prin plasarea indexului elementului între paranteze pătrate [ ]
după numele matricei.
double salariu = balance[9];
Astfel, fiecare element din matricea a este identificat printr-un nume de element al
formularului a[i][j], unde 'a' este numele matricei, iar 'i' și 'j' sunt etichetele
care identifică în mod unic fiecare element din 'a'.
bidimensionale
În exemplul următor declarația va returna al 4-lea element din a 3-a linie a matricei.
#include <stdio.h> return 0;
}
int main ( )
{
// o matrice cu 5 linii si 2 coloane
int a[5][2] =
{{0,0},{1,2},{2,4},{3,6},{4,8}};
int i, j;
// iesire a valorii fiecarui element
matrice
for (i=0;i<5;i++)
{
for (j=0;j<2;j++)
{
printf ("a[%d][%d] = %d\n", i, j,
a[i][j]);
}
}
Dacă se dorește atribuirea unei matrice cu o singură dimensiune ca argument într-o
funcție, va trebui să se declare un parametru formal, într-unul din următoarele trei
moduri și toate cele trei metode de declarare produc rezultate similare, deoarece fiecare
spune compilatorului că a primit un pointer de tip int.
În mod similar se poate trece la o matrice multidimensională ca parametri formali.
Model 1 Model 2 Model 3
Parametrii formali ca pointer Parametrii formali ca matrice de Parametrii formali ca matrice
dimensiuni stabilite nedimensionată
void myFunction(int void myFunction(int void myFunction(int
*param) param[10]) param[ ])
{ { {
. . .
. . .
. . .
} } }
#include <stdio.h> }
/* declararea functiei */
double getAverage (int arr[ ], int double getAverage (int arr[ ], int
size) size);
/* lungimea matricei nu conteaza,
deoarece int main ( )
functia nu efectueaza nici o {
verificare a parametrilor formali */ /* o matrice int cu 5 elemente */
{ int balance[5] = {100,2,4,170,50};
int i; double avg;
double avg; /* trecerea unui pointer matricei ca
double sum = 0; argument */
for (i=0;i<size;++i) avg = getAverage (balance, 5);
{ /* iesirea valorii returnate */
sum+=arr[i]; printf ( "Valoarea medie este:
} %.3f\n", avg);
avg = sum/size; return 0;
return avg; }
În mod direct C nu permite returnarea unei matrice întregi ca argumentul unei funcții.
Cu toate acestea, există posibilitatea să se returneze pointerul unei matrice, specificând
numele acesteia, fără niciun index.
Dacă se dorește returnarea unei matrice cu o singură dimensiune dintr-o funcție, va
trebui să se declare o funcție care returnează un pointer:
int *myFunction( )
{
.
.
.
}
#include <stdio.h>
#include <string.h>
int main ( )
{
char sursa[ ]="Universitatea";
char destinatie[ ]=" din Petrosani";
printf ("\nSirul sursa=%s", sursa);
printf ("\nSirul destinatie=%s", destinatie);
strcat (sursa, destinatie);
printf ("\nSirul destinatie dupa strcat ( )= %s", destinatie);
}
2 – strncat ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char sursa[ ] = "Universitatea";
char destinatie[ ]= "UPET ";
printf ("\nSirul sursa = %s", sursa);
printf ("\nSirul destinatie = %s", destinatie);
strncat (destinatie, sursa, 4);
printf ("\nSirul destinatie dupa strncat ( ) = %s\n", destinatie);
}
3 – strcpy ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char sursa[ ] = "Universitatea";
char destinatie[20]= "UPET";
printf ("\nSirul sursa = %s", sursa);
printf ("\nSirul destinatie = %s", destinatie);
strcpy (destinatie, sursa);
printf ("\nSirul destinatie dupa strcpy ( ) = %s", destinatie);
return 0;
}
4 – strncpy ( )
Copiază numărul dat de caractere ale unui șir în alt șir.
• strncpy ( ) funcția copiază porțiunea conținutului unui șir într-un alt șir.
Sintaxa strncpy ( )
char * strncpy (char * destination, const char * source, size_t num);
Exemple:
strncpy (sir1,sir2,4); // Acesta copiază primele 4 caractere ale sir2 în sir1.
strncpy (sir2,sir1,4); // Acesta copiază primele 4 caractere ale sir1 în sir2.
• Din lungimea șirului sursă, se va copia în șirul de destinație doar numărul specificat de
caractere.
• Dacă șirul destinație este mai scurt decât numărul caracterelor selectate din șirul sursă,
șirul destinație va fi înlocuit de către caracterele selectate.
• Dacă șirul destinație este mai lung decât numărul caracterelor selectate din șirul sursă, se
vor înlocui doar primele caractere cu cele selectate din șirul sursă, păstrându-se restul
caracterelor în șirul destinație.
4 – strncpy ( )
Numai 5 caractere din șirul sursă "Universitatea" este copiat în șirul destinație.
#include <stdio.h>
#include <string.h>
int main ( )
{
char sursa[ ] = "Universitatea";
char destinatie [20]= "UPET";
printf ("\nSirul sursa = %s", sursa);
printf ("\nSirul destinatie = %s", destinatie);
strncpy (destinatie , sursa, 7);
printf ("\nSirul destinatie dupa strcpy ( ) = %s\n", destinatie);
return 0;
}
5 – strlen ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
int lungime;
char array[20]="upet.ro";
lungime = strlen (array);
printf ("\Lungimea sirului = %d \n", lungime);
return 0;
}
6 – strcmp ( )
La fel ca funcția strcmp ( ), doar că în acest caz ′A′ și ′a′ sunt tratate ca fiind
același caracter.
• strcmpi ( ) la fel funcția strcmp ( ), doar că strcmpi ( ) nu este
sensibilă la literele mari ′A′ sau mici ′a′, tratându-le diferit.
• strcmpi ( ) funcția nu este standard, și poate să nu fie disponibilă în
biblioteca standard din C.
• Ambele funcții compară două șiruri date și returnează 0 dacă sunt aceleași.
• Dacă lungimea sir1<sir2, returnează o valoarea negativă. Dacă lungimea
sir1>sir2, returnează o valoare pozitivă.
Sintaxa strcmp ( )
int strcmpi (const char * str1, const char * str2);
7 – strcmpi ( )
În acest program, siruri de caractere "UPET" și "Universitate" sunt comparate. Este returnat 0
atunci când șirurile sunt egale. Valoarea negativă este returnată atunci când sir1>sir2 și valoarea
pozitivă este returnată atunci când sir1<sir2.
#include <stdio.h>
#include <string.h>
int main ( )
{
char sir1[ ] = "UPET";
char sir2[ ] = "Universitate";
int i, j, k ;
i = strcmpi (sir1, "UPET"); // se compara UPET cu UPET = 0
j = strcmpi (sir1, sir2); // se compara UPET cu Universitate = 1
k = strcmpi (sir2, "UPET"); // se compara Universitate cu UPET = -1
printf ("\n%d %d %d\n", i, j, k);
return 0;
}
8 – strchr ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char sir[55] = "Acesta este un sir pentru testare";
char *p;
p = strrchr (sir,'e');
printf ("Caracterul 'e' se gaseste in pozitia %d\n",p-sir+1);
printf ("Ultima aparitie a caracterului \"e\" in \"%s\" este " \
" \"%s\"",sir, p);
return 0;
}
10 – strstr ( )
Dublează șirul
• strdup ( ) dublează șirul dat.
Sintaxa strdup ( )
char *strdup (const char *string);
• strdup ( ) funcția este non standard, și poate să nu fie disponibilă în biblioteca
standard din C.
11 – strdup ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char *p1 = "UPET";
char *p2;
p2 = strdup (p1);
printf ("Sirului este: %s, pentru p1\n", p1);
printf ("Dublarea sirului este: %s, fiind transferat pointerului p2 de la
p1\n", p2);
return 0;
}
12 – strlwr ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char sir[ ] = "MODIFICAREA sirului in MINuscuLE";
printf ("%s\n",strlwr (sir));
return 0;
}
13 – strupr ( )
#include<stdio.h>
#include<string.h>
int main ( )
{
char sir[ ] = "Modificarea Sirului In Majuscule";
printf ("%s\n",strupr (sir));
return 0;
}
14 – strrev ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char name[30] = "Salutari";
printf ("Sirul original: %s\n", name);
printf ("Sirul inversat: %s", strrev (name));
return 0;
}
15 – strset ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char sir[20] = "Universitate";
printf ("Sirul original este: %s\n", sir);
printf ("Sirul convertit este: %s\n",strset (sir,'*'));
return 0;
}
16 – strnset ( )
#include <stdio.h>
#include <string.h>
int main ( )
{
char str[30] = "Universitatea din Petrosani";
printf ("Sirul original este: %s\n", str);
printf ("Sirul dupa convertirea primelor 13 caractere" \
": %s\n", strnset (str,'*',13));
return 0;
}
17 – strtok ( )