Un cuvânt este sufix al unui alt cuvânt dacă se obține din acesta, prin eliminarea primelor sale litere.
Scrieți un program C/C++ care citește de la tastatură două numere naturale n și k (n[2,20],
k[1,n]) și apoi n cuvinte distincte, fiecare fiind format din cel mult 20 de caractere, numai litere mici
ale alfabetului englez.
La introducerea datelor, după fiecare cuvânt se tastează Enter. Programul
afișează pe ecran, separate prin câte un spațiu, cuvintele care îl au drept sufix
pe al k-lea cuvânt citit, ca în exemplu. Dacă nu există astfel de cuvinte, se
afișează pe ecran mesajul nu exista.
Exemplu: dacă n=7, k=3 și se citesc cuvintele alăturate, pe ecran se afișează
paratirisi hiritisi (10p.)

isihast
paratirisi
isi
meremetisire
acolisitor
hiritisi
paraponisit

Răspuns :

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

   char cuvinte[21][20]{ '\0' };

   int n, k;

   cin >> n >> k;

   cin.ignore();

   for (int index = 1; index <= n; index++)

       cin.getline(cuvinte[index], 20);

   bool există = false;

   for (int index = 1; index <= n; index++) {

       if (index == k) continue;

       int index_prefix = strlen(cuvinte[k]) - 1;

       for (int index_aux = strlen(cuvinte[index]) - 1; index_aux >= 0 && index_prefix >= 0; index_aux--, index_prefix--)

           if (cuvinte[index][index_aux] != cuvinte[k][index_prefix])

               break;

       if (index_prefix == -1) {

           există = true;

           for (int index_aux = 0; index_aux < strlen(cuvinte[index]); index_aux++)

               cout << cuvinte[index][index_aux];

           cout << ' ';

       }

   }

   if (!există)

       cout << "nu exista";

   return 0;

}