Witam,
Uczę się programowania c++ w ramach pewnego kursu. Oto zadanie z którym mam problem i bardzo proszę o pomoc dla nowicjusza ;):
Program na wejściu otrzymuje skrócony wyraz, a na wyjściu ma wypisywać wersje rozwiniętą. Rozwinięcie polega na tym, że przechodząc znak po znaku to gdy natrafiamy na cyfrę lub liczbę to zastępujemy to miejsce wskazaną ilością znaku, który poprzedza daną cyfrę czy liczbę. Czyli tam gdzie napotka na przykładowo zapis: A4BD, to wypisze AAAABD albo np A14BD to wypisze AAAAAAAAAAAAAABD.
Problem pojawia się w momencie dopisywania znaków do wyjsiowego stringa.
Poniżej wklejam swój kod z komentarzami:
#include <iostream>
#include <string>
#include <sstream>
#include <string>
using namespace std;
int StringNaInt(string liczba) //funkcja konwertująca stringa na int
{
int liczbaWIncie;
istringstream iss(liczba);
iss >> liczbaWIncie;
return liczbaWIncie;
}
bool czyZnakJestCyfra(char znak) //funckja sprawdzająca czy dany znak jest cyfrą lub nie
{
if ( (znak >= '0') && (znak <= '9') )
return true;
else
return false;
}
int main()
{
string Wyraz; //wyraz wejściowy przed rozpakowaniem
cin>>Wyraz;
string powtarzajacySieZnak;//znak który stoi przed cyfrą lub liczbą
int pozycja=0;
string liczbaWyraz; //zmienna do ktorej beda dodawane cyfry
string rozpakowywanyWyraz; //Zupełnie nowy, przekonwertowany, rozpakowany wyraz na wyjsciu z programu
int dlugosc = Wyraz.length();//poczatkowa dlugosc wyrazu
while (pozycja<=Wyraz.length())
{
//sprawdzenie czy dany znak jest cyfrą
if( czyZnakJestCyfra(Wyraz[(char)pozycja] ) == true)
{
//przypisuje znak który należy powtórzyć o ilość
//na którą wskazuje cyfra tuż przed poniższym znakiem
powtarzajacySieZnak = Wyraz[pozycja-1];
liczbaWyraz = Wyraz[pozycja];
cout<<liczbaWyraz<<endl;
//warunek sprawdzający czy kolejny znak też jest cyfra
while( czyZnakJestCyfra(Wyraz[(char)pozycja+1] ) == true)
{
//zapisuje bieżącą pozycję do zmiennej LiczbaWyraz
liczbaWyraz += Wyraz[pozycja+1];
cout<<liczbaWyraz<<endl;
pozycja++;
}
//uruchomienie funckji konwertującej stringa na int
//odejmuję 1 ponieważ jak wiadomo pierwszy znak już jest wypisany w stringu
(StringNaInt(liczbaWyraz)-1);
cout<<(StringNaInt(liczbaWyraz)-1);
for(int j = 0; j<(StringNaInt(liczbaWyraz)-1);j++)
{
//tutaj gubi sie program
rozpakowywanyWyraz = rozpakowywanyWyraz+powtarzajacySieZnak;
}
}
else
{
// biezący znak NIE jest cyfrą to po prostu przenosze biezący znak do oczekiwanego wyrazu na wyjsciu
rozpakowywanyWyraz[pozycja]=Wyraz[pozycja];
pozycja++;
}
}
cout<<rozpakowywanyWyraz<<endl;//wyraz na wyjsciu
}