Witam,
Dostałem do ręki zadanie, które wymaga dobrego zaznajomienia ze stringami, których jak dotąd nie miałem okazji szlifować. Postanowiłem się jednak podjąć, bo prędzej czy później taka umiejętność na pewno zaplusuje :D Zadanie pochodzi z Polskiego SPOJ'a (zadanie "Flamaster")i polega na zamienieniu ciągu znaków i inputu, w ten sposób że w outpucie znaki które powtarzają się koło siebie zamieniane są na jeden znak plus ich wielokrotność (np. AAAABBBBAAABBBAAB = A4B4A3B3AAB). Popełniłem już jeden kod, ale przez dobre 2 godziny zmagałem się z ukochanym "Nieobsługiwanym wyjątkiem". Wrzucam kod i screenshota błędu. Jeżeli jakaś mądra głowa podejmie się próby doedukowania mnie w tym temacie będę mega wdzięczny.
#include <iostream>
#include <string>
using namespace std;
string napis;
int ile;
int main()
{
cin >> ile;
for (int i = 1; i <= ile; i++)
{
cin >> napis;
int dl = napis.length();
int j = 1;
int a = 1;
while (dl--)
{
if (napis[dl-2]) // tutaj mi wywala blad (jpg w zalaczniku)
{
if (napis[dl - 2] == napis[dl-1])
{
a++;
}
}
else if ((napis[dl-2] != napis[dl-1] && a>2)||(!napis[dl-2])&&(a>2))
{
string nowy = napis;
nowy[dl ] = a;
nowy.erase(dl+1, dl+a-3);
napis = nowy;
a = 1;
dl = napis.length();
/*
else if (a < 100)
{
nowy[i + 1] = a/10;
nowy[i + 2] = a % 10;
nowy.erase(j + 3, dl - j + 3);
string recha = napis.substr(j + a, dl);
nowy.insert(j + 3, recha);
napis = nowy;
a = 1;
}
else
{
nowy[i + 1] = a / 100;
nowy[i + 2] = (a%100) / 10;
nowy[i + 3] = ((a % 100) % 10);
nowy.erase(j + 4, dl - j + 4);
string recha = napis.substr(j + a, dl);
nowy.insert(j + 4, recha);
napis = nowy;
a = 1;
}
*/
}
}
cout << napis << "\n";
}
}