PCLP Laborator07: Problemset (extra)
Probleme extra propuse pentru PCLP Laborator07.
-
Implementați funcția
my_strcmpi(const char *s1, const char *s2)care va întoarce:0dacă cele două string-uri sunt egale;< 0dacă șirul de caracteres1se află înaintea luis2în ordine lexicografică;> 0dacă șirul de caracteres2se află înaintea luis1în ordine lexicografică.
În cazul în care cere 2 șiruri au lungimi diferite, face comparația caracter cu caracter până la caracterul special '\0', inclusiv.
Comparația se va face fără a ține cont de diferențele între literele mici și mari, iar implementarea se va face fără a folosi funcția
strlenși/sau operatorul[]. -
Scrieți o funcție
void count_vowels(const char *s, int counts[])care primește ca prim parametru un șir de caractere și întoarce (prin al 2-lea parametru) numărul de apariții al fiecărei vocale a limbii engleze.Numărarea nu va face diferență între literele mari sau cele mici.
De exemplu, pentru șirul de intrare
"Ana are mere.", rezultatul va fi{3, 3, 0, 0, 0}, deoarece vocaleleașieapar de exact 3 ori fiecare, iar vocalelei,oșiunu apar deloc în text. -
Scrieți un program care citește linie cu linie perechi de câte 2 cuvinte, iar pentru fiecare pereche afișează textul
DA, dacă cuvintele sunt unul anagrama celuilalt, respectivNUîn caz contrar.Citirea se va încheia atunci când de la tastatură se citește fie o linie goală, fie o linie care nu conține exact 2 cuvinte separate prin spațiu.
Hint: Un cuvânt este anagrama unui alt cuvând dacă este format din exact aceleași litere, dar în altă ordine. Numărul de apariții al fiecărei litere trebuie să fie egal în ambele cuvinte.
-
Să se scrie funcția:
char* case_reverse(char* string);
Funcția primește ca parametru un șir de caractere (string) și returnează un nou șir, alocat dinamic, în care:
- toate literele mici devin litere mari;
- toate literele mari devin litere mici;
- orice alte caractere (cifre, spații, semne de punctuație etc.) rămân nemodificate.
Observație: Apelantul este responsabil să elibereze memoria alocată dinamic pentru șirul returnat.
a) Să se implementeze funcția case_reverse folosind funcțiile din <ctype.h> (de exemplu islower, isupper, tolower, toupper).
b) Să se rescrie funcția astfel încât schimbarea capitalizării să fie realizată doar folosind operații pe biți (de exemplu &, |, ^), fără a apela funcțiile din <ctype.h> pentru conversia între litere mici și mari. Se vor trata doar literele din alfabetul englez ('A'–'Z', 'a'–'z').
Exemplu
Pentru șirul de intrare:
"Abc DeF 123!"
un apel corect al funcției case_reverse trebuie să producă șirul:
"aBC dEf 123!"