Limbaje de Programare Curs 5 – Siruri de caractere

Documente similare
Limbaje de Programare Curs 6 – Functii de intrare-iesire

Microsoft Word - CarteC.doc

Limbaje de Programare Curs 8 – Fisiere

Object Oriented Programming

LUCRAREA NR

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Microsoft Word - PCLP2_Curs_4_2019.doc

SUBPROGRAME

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

L7

E_d_Informatica_sp_MI_2015_bar_02_LRO

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

SIRURI DE CARACTERE in C++ O constanta de tip sir de caractere de declara intre doua caractere. In memoria interna, o constanta de acest tip este reti

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

E_d_Informatica_sp_SN_2014_bar_10_LRO

Programarea şi utilizarea calculatoarelor

C++ Probleme

Top

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Subiectul 1

Fişiere 11 ianuarie 2004 Utilizarea şi programarea calculatoarelor. Curs 13 Marius Minea

Slide 1

Microsoft Word - c6.doc

Slide 1

Slide 1

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Laborator 04: Apeluri de funcții

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Diapositive 1

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Slide 1

Slide 1

PRELEGERE XIII PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE Noţiunea de funcţie - continuare VI. Funcţii recursive O funcţie se poate activa n

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Grile si probleme siruri de caractere in C++ ŞIRURI DE CARACTERE Itemii următori sunt preluaţi din variantele de bacalaureat În secvenţa de i

Programarea şi utilizarea calculatoarelor

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Baze de date - Anul 2 Laborator 8 Limbajul de definire a datelor (LDD) (partea I) În general, instrucţiunile LDD sunt utilizate pentru definirea struc

Microsoft Word - CarteC.doc

PCLPII-C16(9)

Laborator 3

Declararea variabilelor

Logică și structuri discrete Mulțimi Casandra Holotescu

Microsoft Word - Cuprins_LP.doc

-

Modelarea si Simularea Sistemelor de Calcul

PowerPoint-Präsentation

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - O problema cu bits.doc

Managementul Resurselor Umane

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Microsoft Word - Ivan, Boja.doc

Lab6LCD

Paradigme de Programare

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Microsoft Word - CarteC.doc

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

Microsoft Word - unitati de invatare 11liceu-12 sam

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Microsoft Word - CarteC.doc

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

proiectarea bazelor de date

Aggregating Data

Metode de programare Proiectarea algoritmilor

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

/*

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Programarea şi utilizarea calculatoarelor

Curs 6 Gestiunea memoriei in C++ Alocare dinamica. Destructor. RAII. Rule of three. Tratarea excepțiilor exception safe code Moștenire Curs 5 Template

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Capitole Speciale de Informatică Curs 2: Determinarea vocabularului de termeni şi a listelor de postări 4 octombrie 2018 Reamintim că listele de indec

PHP (II)

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Baze de date-Anul 2 (semestrul 2)

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Concepte fundamentale ale limbajelor de programare

PPSD

1

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Rezolvare model de subiect practic P2 Programarea Calculatoarelor sesiunea iunie 2017

Microsoft Word - Curs 7 - JavaScript.doc

Examen de licenţă Informatică Exemple de întrebări - Structuri discrete şi algoritmi In atenţia studenţilor: Proba scrisă a examenului de licen

Backtracking_2018

Tablouri (continuare)

Examen de licenţă Informatică Exemple de întrebări - Structuri discrete şi algoritmi In atenţia studenţilor: Proba scrisă a examenului de licen

Lucrarea 10

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Paradigme de programare

Transcriere:

Limbaje de Programare Curs 5 Şiruri de caractere Dr. Casandra Holotescu Universitatea Politehnica Timişoara

Ce discutăm azi... 1 Şiruri de caractere 2 Tipul pointer 3 Funcţii cu şiruri de caractere

Şiruri de caractere În C, un şir de caractere este un tablou de caractere, încheiat în memorie cu caracterul \0. dimensiunea unui şir = numărul de caractere + 1! char cuvant [ 2 0 ] ; // n e i n i t i a l i z a t char msg1 [ ] = t e s t ; // 5 o c t e t i, t e r m i n a t cu \0 char msg2 [ ] = { t, e, s, t, \ 0 ; // a c e l a s i ca msg1, s c r i s a l t f e l char nume [ 3 ] = { E, T, C ; // nu a r e \0 l a s f a r s i t! char s i r [ 2 0 ] = t e s t ; // r e s t u l pana l a 20 sunt \0

Şiruri de caractere În C, un şir de caractere este un tablou de caractere, încheiat în memorie cu caracterul \0. Atenţie: \0 apare în şir doar la memorare, nu apare explicit într-o constantă şir de caractere, nu se citeşte şi nu se tipăreşte! toate funcţiile standard pentru şiruri (din string.h) depind de prezenţa lui \0 la sfârşitul şirului (astfel nu au nevoie să cunoască lungimea şirului!) când specificăm dimensiunea unui şir trebuie să alocăm dimensiunea dorită + 1 pentru \0

Citirea unui şir caracter cu caracter v o i d r e a d S t r i n g ( char a [ ], i n t n ){ // c i t i m un s i r de maxim n c a r a c t e r e i n t i = 0 ; i n t c = g e t c h a r ( ) ; w h i l e ( c!= EOF && i < n ){ a [ i ] = c ; //punem c a r a c t. c i t i t i n t a b l o u i ++; // avansam i n d i c e l e t a b l o u l u i c = g e t c h a r ( ) ; // c i t i m c a r a c t. urmator a [ i ] = \ 0 ; //marcam s f a r s i t u l s i r u l u i

Tipărirea şirului cu printf: Citirea şi tipărirea formatată char s i r [ 2 0 ] = un s i r o a r e c a r e ; p r i n t f ( % s, s i r ) ; Citirea şirului cu scanf: char s i r [ 2 0 ] ; s c a n f ( %19 s, & s i r ) ; // adauga \0 l a s f. s c a n f ( %19 s, s i r ) ; // e c h i v a l e n t a cu & s i r Nu se citesc şiruri fără limitare! Nu se citeşte cu gets! s c a n f ( % s, & s i r ) ; //NU!! // f. p e r i c u l o s, c i t e s t e o r i c a t e c a r a c t e r e // de l a i n t r a r e, i n d i f e r e n t de d i m ensiunea // s i r u l u i d e s t i n a t i e!!

Tipul pointer Orice variabilă x are o adresă, &x, unde se memorează valoarea ei. fiind o expresie, &x are un tip: tipul pointer (adresă) Pentru o variabilă declarată: nume-tip x; adresa & x are tipul nume-tip * = pointer la nume-tip, adresa unui obiect de tip nume-tip

Tipul pointer Numele unui tablou are tipul pointer la tipul elementului: int a[4]; a are tipul int * char s[8]; s are tipul char * La declararea parametrilor funcţiei: void f(tip a[ ]) înseamnă de fapt void f(tip *a) (de aceea dimensiunea: void f(tip a[6]) nu contează) Tipul unei constante şir de caractere sir este char * = adresa unde se găseşte şirul în memorie Valoarea specială NULL (0 de tip void * = adresă de tip neprecizat) e folosit pentru a indica o adresă invalidă.

s i z e t s t r l e n ( c o n s t char s ) ; // r e t u r n e a z a lungimea s i r u l u i s Funcţii din string.h char s t r c h r ( c o n s t char s, i n t c ) ; // cauta c a r a c t. c i n s i r u l s, r e t u r n e a z a a d r e s a // unde l a g a s i t sau NULL ( 0 ) daca nu l g a s e s t e char s t r c p y ( char dest, c o n s t char s r c ) ; // c o p i a z a s r c i n d e s t char s t r n c p y ( char dest, c o n s t char s r c, s i z e t n ) ; // c o p i a z a c e l mult n c a r a c t e r e d i n s r c i n d e s t size t: tip întreg fără semn pentru dimensiuni const: specificator de tip, obiectul respectiv nu e modificat

Funcţii din string.h i n t strcmp ( c o n s t char s1, c o n s t char s2 ) ; // compara 2 s i r u r i // r e t u r n e a z a i n t r e g < 0 sau == 0 sau > 0 // dupa cum e s1 f a t a de s2 i n t strncmp ( c o n s t char s1, c o n s t char s2, s i z e t n ) ; // compara s i r u r i l e pe l u n g. c e l mult n c a r a c t e r e char s t r c a t ( char dest, c o n s t char s r c ) ; // c o n c a t e n e a z a s r c l a d e s t // l a d e s t t r e b u i e sa f i e l o c s u f i c i e n t char s t r n c a t ( char dest, c o n s t char s r c, s i z e t n ) ; // concat c e l mult n c a r a c t e r e d i n s r c l a d e s t

Lungimea unui şir s i z e t s t r l e n ( c o n s t char s ) { // lungimea s i r u l u i, pana l a \0 // s i z e t ( s t d d e f. h ) : t i p pt. d i m e n s i u n i p o z i t i v e // ( u n s i g n e d sau l o n g u n s i g n e d ) i n t i =0; w h i l e ( s [ i ]!= \ 0 ) i ++; // avanseaza pana i n t a l n e s t e \0 r e t u r n i ; // nr. de c a r a c t. ; \0 nu e numarat

Compararea a două şiruri i n t strcmp ( c o n s t char s1, c o n s t char s2 ) { // compara 2 s i r u r i i n t i =0; w h i l e ( s1 [ i ] = = s2 [ i ] && s1 [ i ]!= \ 0 ) i ++; // e g a l e dar s1 [ i ] nu e \0 r e t u r n s1 [ i ] s2 [ i ] ; // < 0 pt. s1 < s2 // > 0 pt. s1 > s2 // = = 0 daca s1, s2 e g a l e

Copierea unui şir char s t r c p y ( char dest, c o n s t char s r c ) { // c o p i a z a s r c i n d e s t i n t i =0; w h i l e ( s r c [ i ]! = \ 0 ) { // c o p i a z a pana l a \0 d e s t [ i ] = s r c [ i ] ; i ++; // t r e b u i e sa avem l o c i n s i r u l d e s t!!! d e s t [ i ] = \ 0 ; r e t u r n d e s t ; // r e t u r n e a z a d e s t p r i n c o n v e n t i e

Concatenarea a două şiruri char s t r c a t ( char dest, c o n s t char s r c ) { // c o n c a t e n e a z a s r c l a d e s t // t r e b u i e sa avem l o c i n coada l u i d e s t!!! i n t i =0, j =0; w h i l e ( d e s t [ i ]!= \ 0 ) ++i ; w h i l e ( s r c [ j ]!= \ 0 ) { d e s t [ i ] = s r c [ j ] ; ++i ; ++j ; d e s t [ i ] = \ 0 ; r e t u r n d e s t ;

Găsirea unui caracter într-un sir char s t r c h r ( c o n s t char s, char c ) { // cauta c a r a c t e r u l c i n s i r u l s i n t i =0; w h i l e ( s [ i ]!= \ 0 ) { i f ( s [ i ] = = c ) r e t u r n &s [ i ] ; // r e t u r n e a z a a d r e s a c a r a c t. i n s i r i ++; r e t u r n NULL ; // r e t u r n e a z a NULL daca nu a f o s t g a s i t

Exemple i n t indicemax ( char tab [ ], i n t n ){ //max unui t a b l o u de s i r u r i de c a r a c t e r e i n t i =0, i n d e x =0; f o r ( i =0; i <n ; i ++){ i f ( strcmp ( tab [ i ], tab [ i n d e x ] ) > 0) // daca s i r u l tab [ i ] > s i r u l tab [ i n d e x ] i n d e x=i ; r e t u r n i n d e x ;

Exemple v o i d a l l ( char tab [ ], i n t n, char rez, i n t rn ){ // c o n c a t e n e a z a e l e m e n t e l e unui t a b l o u de s i r u r i i n t i =0; i f ( s t r l e n ( tab [ 0 ] ) < rn ) // daca e l o c i n r e z s t r c p y ( rez, tab [ 0 ] ) ; // copiem p r i m u l s i r f o r ( i =1; i <n ; i ++) i f ( s t r l e n ( r e z ) + s t r l e n ( tab [ i ] ) + 2) < rn ){ // daca mai avem l o c i n s i r u l r e z s t r c a t ( rez,, ) ; // cu v i r g u l a i n t r e s t r c a t ( rez, tab [ i ] ) ;