Witam,
Ma za zadanie napisać program, który skraca wyraz od wybranego znaku, czyli, np. podaję ilość testów, potem aaaaaa, następnie 3 to program powinien pokazać a4. Jednak mój program na wyjściu pokazuje jakieś bzdury. Nie mogę gdzie w kodzie jest błąd.
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
string konwersjaIntNaString (int liczba)
{
ostringstream ss;
ss << liczba;
string str = ss.str();
return str;
}
int obliczWystapieniaWybranegoZnaku (string wyraz, int pozycjaZnaku)
{
int iloscWystapien = 1;
if (wyraz.length() > pozycjaZnaku)
{
while (wyraz[pozycjaZnaku] == wyraz[pozycjaZnaku + 1])
{
iloscWystapien++;
pozycjaZnaku++;
}
}
else
iloscWystapien = 0;
return iloscWystapien;
}
int obliczIleTakichSamychZnakowWystepujeObokSiebie (string wyrazDoSkrocenia, int pozycja)
{
int iloscTakichSamychZnakow = 1;
while ((wyrazDoSkrocenia[pozycja] == wyrazDoSkrocenia[pozycja + 1]) && (!isdigit(wyrazDoSkrocenia[pozycja])))
{
iloscTakichSamychZnakow++;
pozycja++;
}
return iloscTakichSamychZnakow;
}
string skracanieWyrazow(string wyrazDoSkrocenia, int minimalnaIloscZnakowOdKtorychNalezySkracac)
{
int dlugosc = wyrazDoSkrocenia.length();
int iloscWystapien = 1;
char powtarzajacySieZnak;
for (int i = 0; i < dlugosc; i++)
{
if ( !isdigit(wyrazDoSkrocenia[i]) && obliczIleTakichSamychZnakowWystepujeObokSiebie(wyrazDoSkrocenia, i) >= minimalnaIloscZnakowOdKtorychNalezySkracac)
{
iloscWystapien = obliczWystapieniaWybranegoZnaku(wyrazDoSkrocenia, i);
powtarzajacySieZnak = wyrazDoSkrocenia[i];
wyrazDoSkrocenia.replace(minimalnaIloscZnakowOdKtorychNalezySkracac, iloscWystapien, powtarzajacySieZnak + konwersjaIntNaString(iloscWystapien));
dlugosc = wyrazDoSkrocenia.length();
}
}
return wyrazDoSkrocenia;
}
int main()
{
string wyraz;
int liczbaTestow;
int minimalnaIloscZnakowOdKtorychNalezySkracac;
cin >> liczbaTestow;
for (int i = 0; i < liczbaTestow; i++)
{
cin >> wyraz;
cin >> minimalnaIloscZnakowOdKtorychNalezySkracac;
cout << skracanieWyrazow(wyraz, minimalnaIloscZnakowOdKtorychNalezySkracac) << endl;
}
return 0;
}