Witam.
Program ma za zadanie pobrać dowolny napis, następnie drugi napis będący instrukcjami jego zmodyfikowania, zmodyfikować i wypisać na ekran wynik pracy.
Pełna treść: main.edu.pl/pl/user.phtml?op=showtask&task=mod&con=PAS
Oto, co mam:
#include <iostream>
#include <string>
using namespace std;
string zamien(string s, char co, char na_co)
{
string::size_type pozycja = 0;
for(unsigned short i = 0; i < s.size(); i++)
{
if( (pozycja = s.find(co) ) == string::npos ) break;
else // znalezlismy literke
{
s[pozycja] = na_co;
}
}
return s;
}
string usun(string s, unsigned short ile_cyf_lb, string::size_type poz_pocz)
{
string pomoc = s.substr(poz_pocz, ile_cyf_lb); // substring zawierajacy tylko liczbe
char *liczba;
pomoc.copy(liczba, string::npos);
unsigned short lb = atoi(liczba); // zamieniamy znaki na pelnoprawna liczbe
s.resize( s.size() - lb ); // ucinamy
return s;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string s;
getline(cin, s);
string operacje;
getline(cin, operacje, 'N');
unsigned short i = 0;
while(i < operacje.size())
{
switch(operacje[i])
{
case 'Z': // zamiana
{
s = zamien(s, operacje[i + 2], operacje[i + 4]);
i += 6; break;
}
case 'D': // doklejenie
{
s += operacje[i + 2];
i += 4; break;
}
case 'U': // usuwanie
{
unsigned short cyfry = 1; // w domysle od 1 do 9 tj. 1 cyfrowe
for(unsigned short j = i + 1; j < operacje.size() - 1; j++)
{ // szukamy pozycji, w ktorej zaczyna sie kolejna operacja <=> wiemy, gdzie konczy sie
// podawanie samej liczby
if( operacje[j] == 'Z' || operacje[j] == 'D' || operacje[j] == 'U')
{
cyfry = j - (i + 1) - 2;
break;
}
}
s = usun(s, cyfry, i+2);
i = i + 3 + cyfry; break;
}
default: i++;
}
}
cout << s;
}
W bardzo wielu przypadkach program niepoprawnie się wykonuje, wypisując błąd:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Proszę o pomoc i z góry dziękuję.