fbpx

Problema #889 – CuvinteComune – Rezolvari PBInfo

de Mihai-Alexandru

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
#include <bits/stdc++.h>

using namespace std;

char a[200][200] , b[200][200] , r[200][200] , p;

bool egale(int i , int j)
{
    bool ok = true;
    for(int k = 0 ; k < max(strlen(a[i]) , strlen(b[j])) ; ++k)
        if(tolower(a[i][k])!=tolower(b[j][k]))
            ok=false;
    return ok;
}

int main()
{
    char s[300];
    cin.getline(s , 300);
    int i = 0 , j = 0 , cnt = 0;
    while(s[i]!='\0')
        i++;
    s[i]=' ';
    s[i+1]='\0';
    i=0;
    while(s[i]!='\0')
    {
        if(s[i]!=' ')
        {
            a[cnt][j]=s[i];
            j++;
        }
        else
        {
            j=0;
            if(s[i+1]!=' ')
                cnt++;
        }
        i++;
    }
    int n = cnt;
    cin.getline(s , 300);
    i = 0 , j = 0 ; cnt = 0;
    while(s[i]!='\0')
        i++;
    s[i]=' ';
    s[i+1]='\0';
    i=0;
    while(s[i]!='\0')
    {
        if(s[i]!=' ')
        {
            b[cnt][j]=s[i];
            j++;
        }
        else
            cnt++ , j=0;
        i++;
    }
    int m = cnt;
    cnt=0;
    for(int i = 0 ; i < n ; ++i)
    {
        for(int j = 0 ; j < m ; ++j)
        {
            if(egale(i , j))
            {
                int q = 0;
                while(a[i][q]!='\0')
                {
                    r[p][q]=tolower(a[i][q]);
                    q++;
                }
                p++;
            }
        }
    }
    for(int i = 0 ; i < p ; ++i)
    {
        for(int j = i + 1 ; j < p ; ++j)
        {
            if(strcmp(r[i] , r[j]) > 0)
                swap(r[i] , r[j]);
        }
    }
    for(int i = 0 ; i < p ; ++i)
    {
        for(int j = i + 1 ; j < p ; ++j)
        {
            if(strcmp(r[i] , r[j]) == 0)
                r[j][0]='\0';
        }
    }
    for(int i = 0 ; i < p ; ++i)
    {
        if(r[i][0]!='\0')
            cout << r[i] << endl;
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa