Szukanie i usuwanie osoby mającej 3 samogłoski w nazwisku i rok.ur parzysty.

0

Polecenie: Dodaj do dynamicznej listy z osobami opcję, która wykasuje wszystkie osoby które mają co najmniej trzy samogłoski w nazwisku i urodziły się w parzystym roku.

Kod z listą:

main.cpp: http://wklej.org/id/1602368/
listy.h: http://wklej.org/id/1602371/
listy.cpp: http://wklej.org/id/1602373/

Po prostu dać if'a i przeszukiwać całego stringa? A warunek do roku parzystego już raz kiedyś robiłem, więc będę wiedział:P

Jak do tej pory napisałem taki kod:

void kolos()
{
	int licznik = 0, parzysty, i=0;
	while (!IsLast())
	{
		GetFirst(); //current = root;

		parzysty = 2015 - current->Age;



		for (int i = 0; i < strlen(current->LastName); i++){
			if (current->LastName[i] == 'a' || current->LastName[i] == 'e' || current->LastName[i] == 'i' || current->LastName[i] == 'o' || current->LastName[i] == 'u' || current->LastName[i] == 'y')
			{

				licznik++;


			}


		}


		if (licznik > 2 && ((parzysty % 4 == 0 && parzysty % 100 != 0) || parzysty % 400 == 0))
		{
			Delete(current);
		}
		GetNext();
	}
		cout << "\n";

		i = 0;
		licznik = 0;
	
}

Problem leży w usuwaniu kilkukrotnym, tzn. gdy jest pętla while, program wysypuje się gdy ma drugi raz usunąć element, gdy usunę pętlę i uruchamiam sobie kilka razy funkcję to działa bez problemu. Ktoś ma pomysł co zrobić z tym usuwaniem?

0
  1. Nie odróżniasz roku parzystego od przestępnego.
  2. Wywołując za każdym razem GetFirst() Twoja pętla może działać w nieskończoność.
  3. Problem polega na tym, że po użyciu Delete() wskaźnik current jest już nieaktualny (wskazuje na element, który został już usunięty), więc nie możesz użyć GetNext().
if (licznik > 2 && parzysty % 2 == 0)
{
    PERSON *temp = current->Next;
    Delete(current);
    current = temp;
}
else
{
    GetNext();
}

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