Extras din laborator
Obiectivele temei
1. Aprofundarea cunoştinţelor în limbajul şi mediul TurboC şi perfecţionarea tehnicii de programare cu subprograme predefinite în prelucrarea şirurilor de caractere în C.
2. Însuşirea procedeelor de utilizare efectivă a funcţiilor predefinite referitoare la şiruri caracteriale.
3. Analiza specificului de algoritmizare şi progamare a fragmentelor de texte prin comparaţia soluţiilor stereotipe şi celor eficiente de introducere, afişare şi diverse manipulări asupra textelor: parcurgeri, căutări, schimbări şi rearanjări etc.
Subiectele temei şi ordinea executării
1. Studierea principiilor prelucrării (descrierii, declarării, formării, etc.) şirurilor caracteriale în C.
2. Studierea metodelor şi tehnicilor de bază de prelucrare a textelor ca şiruri caracteriale, analizând exemplele din indicaţii şi de reflectat în raport cu comentariile de rigoare.
3. Elaborarea algoritmului şi programului de soluţionare a variantei respective (Anexa).
4. Depanarea programului şi verificarea corectitudinei cu ajutorul testelor elaborate.
Conţinutul raportului (vezi lucr. de laborator nr.1-6)
Suplimentar: Evidenţierea specificului prelucrării şirurilor caracteriale în C şi analiza erorilor admise pe parcursul efectuării lucrării şi eficienţa algoritmilor elaboraţi.
Întrebările de autocontrol:
1.1. Caracterizaţi şirurile caracteriale şi declaraţi în diferite moduri posibile în limbajul C.
Un şir este o succesiune de caractere scrise între ghilimele, de exemplu „ABCD”.
Când un şir apare într-un program C, compilatorul creează un masiv de caractere care conţine caracterele şirului şi plasează automat caracterul NULL (‚ ’) la sfârşitul şirului, astfel ca programele care operează asupra şirurilor să poată detecta sfârşitul acestora. Această reprezentare înseamnă că, teoretic, nu există o limită a lungimii unui şir, iar programele trebuie să parcurgă şirul, analizându-l pentru a-i determina lungimea. Se admit şi şiruri de lungime zero.
Tehnic, un şir este un masiv ale cărui elemente sunt caractere. El are tipul masiv de caractere şi clasa de memorie static. Un şir este iniţializat cu caracterele date.
tip_de_date nume_şir[dimensiune];
unde:
- -tip_de_date: este tipul datei (obligatoriu char) ;
- -nume şir: este numele pe care îl dăm şirului ;
- -dimensiune: reprezintă numărul de caractere pe care îl conţine şirul .
- ca tablou de caractere; exemple:
#define MAXCUVINT 100
char name [15]; char w[MAXCUVINT]; char sir1[30]; char sir2[10]="exemplu";
- ca pointer la caractere; exemple:
char *sir3; // şir3 trebuie initializat cu adresa unui şir sau a unui spatiu alocat pe heap
sir3=sir1; // sir3 ia adresa unui sir static
// sir3=&sir1; sir3=&sir1[0]; sunt echivalente cu instr de atribuire de mai sus
sir3=(char *)malloc(100); // se aloca dinamic un spatiu pe heap.
char *sir4="test"; // sir4 este initializat cu adresa sirului constant
char s[10]; vom avea tabloul s, cu elemente de tip char, având 10 elemente
1.2. În ce mod se citesc şi se afişează elementele şirurilor caracteriale?
Citirea unui sir poate fi efectuat in mai multe moduri de exemplu:
1) char s[20];
scanf(“%s”,s); //astfel va citi sirul pina la apasarea tastei space
2) gets(s); //va citi sirul pina la apasarea tastei enter
1.3. Enumeraţi şi exemplificaţi apelurile funcţiilor predefinite pentru prelucrarea şirurilor caracteriale.
declarate in stdio.h
char * gets(char * s);
citeste caracterele din intrare pina la intalnirea caracterului Enter, care nu se adauga la sirul s; plaseaza ' ' la sfarsitul lui s; returneaza adresa primului caracter din sir; daca se tasteaza CTRL/Z returneaza NULL; codul lui Enter e scos din buffer-ul de intrare
int puts(char * s);
tipareste sirul s, trece apoi la rand nou
scanf("%s",s);
citeste caracterele din intrare pina la intalnirea primului blanc sau Enter, care nu se adauga la sirul s; plaseaza ' ' la sfarsitul lui s; daca se tasteaza CTRL/Z returneaza EOF; codul lui blanc sau Enter raman in buffer-ul de intrare
printf("%s",s);
tipareste sirul s
declarate in string.h
int strcmp(char *s1,char *s2);
returneaza <0, daca s1 < s2
0, daca s1 = s2
>0, daca s1 > s2
int strncmp(char *s1,char *s2,int n);
comparare a doua siruri pe lungimea n
char* strcpy(char *d,char *s);
copiaza sirul sursa s in sirul destinatie d; returneaza adresa sirului destinatie
char* strncpy(char *d,char *s,int n);
copiaza maxim n caractere de la sursa la destinatie; returneaza adresa sirului destinatie
int strlen(char *s);
returneaza lungimea sirului fara a numara caracterul terminator
char* strcat(char *d,char *s);
concateneaza cele doua siruri si returneaza adresa sirului rezultat
char* strchr(char s,char c);
returneaza pozitia primei aparitii a caracterului c in sirul s, respectiv NULL daca c nu e in s
char* strstr(char *s,char *ss);
returneaza pozitia primei aparitii a sirului ss in sirul s, respectiv NULL daca ss nu e in s.
Preview document
Conținut arhivă zip
- Prelucrarea Sirurilor Caracteriale.doc