# PBinfo #889 – CuvinteComune – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Se dau două propoziții formate din litere mari și mici ale alfabetului englez și spații. Să se afișeze în ordine alfabetică cuvintele care apar în ambele șiruri.

Date de intrare
Programul citește de la tastatură cele două propoziții, separate printr-un caracter newline.

Date de ieșire
Programul va afișa pe ecran cuvintele comune, scrise cu litere mici, fiecare pe o linie, în ordine alfabetică.

Restricții și precizări

șirurile date au cel mult 255 de caractere
nu se face distincție între literele mari și cele mici
dacă un cuvânt comun apare de mai multe ori, se va afișa o singură dată

Exemplu:
Intrare

Ana si Maria au mere si nuci
ana are MERE si Pere si prune
Ieșire

ana
mere
si

## Cod sursă C++

```cpp
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
char S[256], T [256], A[100][256], B[100][256];
int n , m;
bool litera_mica(char X) { 	return X >= 'a' && X <= 'z'; }
bool litera_mare(char X) {  return X >= 'A' && X <= 'Z'; }
char to_lower(char X)
{
	if(litera_mare(X))
		return X + ('a' - 'A');
	return X;
}
void lowercase(char * s)
{
	for(int i = 0 ; s[i] ; i ++)
		s[i] = to_lower(s[i]);
}
void extract(char *S , int &n , char A[][256])
{
	char * p = strtok(S, " ");	
	while(p)
	{
		bool gasit = false;
		for(int i = 1 ; i <= n && !gasit ; i ++)
			if(strcmp(p , A[i]) == 0)
				gasit = true;
		if(!gasit)
		{
			++n;
			strcpy(A[n] , p);
		}
		p = strtok(NULL , " ");
	}
}
void sortare(int &n , char A[][256])
{
	char x[256];
	for(int i = 1 ; i < n ; i ++)
		for(int j = i + 1 ; j <= n ; j ++)
			if(strcmp(A[i] , A[j]) > 0)
			{
				strcpy(x , A[i]);
				strcpy(A[i] , A[j]);
				strcpy(A[j] , x);
			}
}
void afisare()
{
	for(int i = 1 ; i <= n ; i ++)
	{
		bool gasit = false;
		for(int j = 1 ; j <= n && !gasit ; j ++)
			if(strcmp(B[j] , A[i]) == 0)
				gasit = true;
		if(gasit)
			cout << A[i] <<"\n";
	}
}
int main()
{
	cin.getline(S , 256);
	cin.getline(T , 256);
	lowercase(S);
	lowercase(T);
	extract(S, n, A);
	sortare(n , A);
	extract(T, m, B);
	afisare();
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/889)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/889/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-889/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
