witam , pytanie dotyczy dość trudnego jak dla mnie zadania z serwisu SPOJ : http://pl.spoj.com/problems/FLAMASTE/
jego celem jest odpowiednie zmodyfikowanie i skrócenie napisu ,treść w linku . Program jako tako wygodnie mi się pisało jednak co zgadniecie jest problem :) ,mianowicie kiedy na wejściu wpisze więcej niż jeden znak to program
się wysypuję
.
wiem że w natłoku informacji mogłem się pomieszać albo ten kod jest kompletnie bez sensu . Oczywiści sam poszukuje błędu ale taki kiepski ze mnie programista więc proszę o pomoc .
z góry dziękuje i pozdrawiam
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
int c;
cin>>c;
for(int i=0; i<c; i++) //dla iloscy prob
{
string word;
cin>>word; //wczytujemy slowo
char _char=word[0];//na poczatek jest pokazywany zerowy znak
int counter = 0; //liczy ilosc znakow
for(int w=1; w<word.length(); w++)
{
if(word[i]==_char) //jezeli jest taki sam jak poprzedni znak
{
counter++; //licznik++;
word.erase(word[i],word[i]); //usowamy ta litere
}
else
{
if(counter<=1) //jezeli byl tylko jeden znak
{
string bufor; //bufor
bufor.push_back(_char); //wkladamy do niego znak
word.insert(word[i],bufor); //wkladamy tan znak
}
else //jezeli wiecej
{
ostringstream ss; //calosc konwertuje inta na char
ss << counter;
string counter_str = ss.str();
char cc = counter_str[0];
string bufor; //taka samy sytuacja jak predtem ale najpierw wkładamy ilosc znakow a potem sam znak
bufor.push_back(cc);
bufor.push_back(_char);
word.insert(word[i],bufor); //wkladamy
}
_char = word[i]; //znak ma nowa wartosc
counter=0; //zerujemy licznik
}
}
cout<<word<<endl; //wyswietlamy tekst po modufikacji
}
return 0;
}