Se consideră un șir de caractere format numai din litere mici ale alfabetului englez. Dacă șirul conține subșiruri consecutive care se repetă, el poate fi scris condensat. De exemplu, șirul mamateteter poate fi scris (ma)2(te)3r – subșirul care se repetă se scrie între paranteze rotunde, urmat de numărul de apariții.
Dându-se un șir în forma condensată, să se determine șirul în forma inițială.
Răspunsuri la întrebare
Răspuns de
2
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
int i,contor=0,contor2=0,k=0;
char a;
string condensat,necondensat;
int main()
{
cout << "introduceti sirul dorit: ";
cin>>condensat;
for(i=0;i<condensat.size();i++)
{
if(condensat[i]=='(')
contor++;
if(condensat[i]==')')
contor++;
}
int pozitii[contor];
for(i=0;i<condensat.size();i++)
{
if(condensat[i]=='(')
{
pozitii[contor2]=i;
contor2++;
}
if(condensat[i]==')')
{
pozitii[contor2]=i;
contor2++;
}
}
for(i=0;i<contor/2;i++)
{
if(isdigit(condensat[pozitii[k+1]+1]))
{
string a=condensat.substr(pozitii[k+1]+1,1);
for(int j=0;j<atoi(a.c_str());j++)
{
necondensat+=condensat.substr(pozitii[k]+1,pozitii[k+1]-pozitii[k]-1);
}
}
else
{
necondensat+=condensat.substr(pozitii[k]+1,pozitii[k+1]-pozitii[k]-1);
}
k+=2;
}
cout<<necondensat;
return 0;
}
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
int i,contor=0,contor2=0,k=0;
char a;
string condensat,necondensat;
int main()
{
cout << "introduceti sirul dorit: ";
cin>>condensat;
for(i=0;i<condensat.size();i++)
{
if(condensat[i]=='(')
contor++;
if(condensat[i]==')')
contor++;
}
int pozitii[contor];
for(i=0;i<condensat.size();i++)
{
if(condensat[i]=='(')
{
pozitii[contor2]=i;
contor2++;
}
if(condensat[i]==')')
{
pozitii[contor2]=i;
contor2++;
}
}
for(i=0;i<contor/2;i++)
{
if(isdigit(condensat[pozitii[k+1]+1]))
{
string a=condensat.substr(pozitii[k+1]+1,1);
for(int j=0;j<atoi(a.c_str());j++)
{
necondensat+=condensat.substr(pozitii[k]+1,pozitii[k+1]-pozitii[k]-1);
}
}
else
{
necondensat+=condensat.substr(pozitii[k]+1,pozitii[k+1]-pozitii[k]-1);
}
k+=2;
}
cout<<necondensat;
return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Engleza,
8 ani în urmă
Engleza,
8 ani în urmă
Matematică,
9 ani în urmă
Chimie,
9 ani în urmă
Limba română,
9 ani în urmă