Problemă rezolvată șir de caractere clasa a XI-a mate-info neintensiv #4

Enunț

Se citește de la tastatură un șir alcătuit din cel mult 100 litere mici ale alfabetului englez. Acest șir va fi supus unor procese de eliminare a tuturor secvențelor de caractere identice situate pe poziții alăturate, eliminările reluându-se până când șirul nu mai conține succesiuni de caractere alăturate egale. Realizați un program care afișează șirul rezultat după aplicarea algoritmului de mai sus.

Exemplu: pentru șirul "vacaantaaa" vom obține în ordine: "vacntaaa" și "vacnt".

Vizual

Exemple de încercat

  • teesst
  • abbc
  • cool
  • rezolvareaa

Rezolvare

#include <iostream>
#include <cstring>
using namespace std;


int main()
{
 char s[101];
 cout << "Sir: "; cin >> s;


 bool schimbare;
 do
 {
  schimbare = false;
  int inceput = -1;
  int sfarsit = -1;
  bool in = false;


  int l = strlen(s);

  for (int i = 0; i < l - 1; ++i)
  {
   if (s[i] == s[i + 1])
   {
    if (in)
    {
     sfarsit = i + 1;
    }
    else
    {
     in = true;
     inceput = i;
     sfarsit = i + 1;
     schimbare = true;
    }
   }
   else
   {
    if (in)
    {
     in = false;
     break;
    }
   }
  }
  if (schimbare)
  {
   for (int i = sfarsit + 1; i < l; ++i)
   {
    s[i - sfarsit + inceput - 1] = s[i];
   }
   l = l - (sfarsit - inceput + 1);
   s[l] = '\0';


   cout << s << endl;
  }
 } while (schimbare);


 return 0;
}

Niciun comentariu:

Trimiteți un comentariu