Wykroczenie poza zakres.

0

Witam.
jestem totalnym laikiem w C++, zacząłem rozwiązywać zadania znalezione w internecie aby trochę nawyknąć do CPP. Znalazlem zadanie którego wymaganiem jest napisanie programu mającego zastępować powtarzające się znaki tekstu cyframi (np AAAAABBBCC -> A5B3CC). Wykonałem to jednym sposobem, i teraz chciałem to ugryźć troche inaczej, i natrafiłem naproblem. Z tego co widzę w linijce 36 przy pętli do/while występuje wykroczenie poza zakres. Jednak nie wiem dlaczego tak się dzieje. Zauważyłem że zawsze przy ostatnim znaku stringa jest wykraczanie poza zakres(np przy aaaaa lub nawet aa nie zlicza ostatniego znaku). Proszę o pomoc.

#include <iostream>
#include <string>

using namespace std;

int main()

{
	int ileStringow;


	cin >> ileStringow;
	string* stringi = new string[ileStringow];

	for (int i = 0; i<ileStringow; i++)
	{
		string temp;
		cin >> temp;

		int iterat = 0;
		for (unsigned int j = 0; j<temp.length(); j++)
		{
			int k = j;
			if (iterat == 0)
			{
				stringi[i] += temp.at(iterat);
				iterat++;
			}
			else if (temp.at(j) == stringi[i].at(iterat - 1))
			{
				int tryCount = 1;
				do
				{
					tryCount++;
					j++;
				} while (temp.at(j) == stringi[i].at(iterat - 1)&&j<temp.length());
				if (tryCount == 2)
				{
					stringi[i] += temp.at(k);
					iterat++;
				}
				else
				{
					string tempo = to_string(tryCount);
					stringi[i] += tempo;
					iterat += tempo.length();
				}
			}
			else
			{
				stringi[i] += temp.at(j);
			}
		}
	}
	for (int i = 0; i<ileStringow; i++)
	{
		cout << stringi[i] << endl;
	}
}
 
2
while (temp.at(j) == stringi[i].at(iterat - 1)&&j<temp.length());

Zły warunek, sprawdzenie indeksu powinno być na początku.
Nie mówiąc rzecz jasna, że cały ten kod najlepiej wyrzuć do kosza i napisz tak, aby Twoja mama/dziewczyna/ktokolwiek inny mógł zrozumieć, co się tam dzieje.

1
#include <iostream>
#include <string>

using namespace std;

int main()
{
	cout << "Podaj Ilosc \"Stringow\" do wyswietlenia" << endl;
	int iloscStr;
	cin>>iloscStr;

	string* str = new string[iloscStr];

	for (int i = 0; i < iloscStr; i++)
	{
		string temp;
		int iter = 0;
		cout << "Podaj \"Stringa\" do przetworzenia" << endl;
		cin >> temp;
		if (temp.length() != 0)str[i] += temp.at(0);
		for (int j = 1; j < temp.length(); j++)
		{
			if (temp.at(j) != str[i].at(iter))
			{
				str[i] += temp.at(j);
				iter++;
			}
			else
			{
				int strCount = 0;
				while (j < temp.length() && temp.at(j) == str[i].at(iter))
				{
					strCount++;
					j++;
				}
				j--;
				if (strCount == 1)
				{
					str[i] += temp.at(j);
					iter++;
				}
				else
				{
					string intStr = to_string(strCount+1);
					str[i] += intStr;
					iter += intStr.length();
				}

			}
		}
	}
	for (int i = 0; i < iloscStr; i++)
	{
		cout << str[i] << endl;
	}
	getchar();
	getchar();
    return 0;
}

Ok teraz działa przepisałem cały kod i juz wiem co bylo zle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1