Wyszukiwanie najdłuższej sekwencji w ciągu

0

Mam taki kod, który ma znaleźć najdłuższy ciąg liter.

ciag max( string s ) {
	ciag ret;
	ret.ile = 0;
	ret.rodzaj = ciemne;
	ciag tmp;
	tmp.ile = 0;
	tmp.rodzaj = ciemne;

	for( siter i = s.begin(); i < s.end(); i++ ) { // siter to typedef string::iterator
		if( type( *i ) == ret.rodzaj )
			tmp.ile++;
		else {
			if( tmp.ile > ret.ile || ( tmp.ile == ret.ile && tmp.rodzaj < ret.rodzaj ) ) {
				ret.ile = tmp.ile;
				ret.rodzaj = tmp.rodzaj;
			}
			tmp.rodzaj = type( *i ); // type() to funkcja określająca typ litery ( samodzielnie działa poprawnie )
			tmp.ile = 1;
		}
	}

	return ret;
}

ciag to struktura zawierająca dane:
ile - ilość liter w szukanym ciągu
rodzaj - typ wyliczeniowy ( JASNE, CIEMNE, jasne, ciemne ).

Jasne to są samogłoski, a ciemne to spółgłoski. Wielkość liter ( JASNE, jasne ) oznacza wielkość liter w wyszukanej sekwencji.

Nie działa to jednak tak jak powinno. Jakieś propozycje?

Z góry dzięki.

0

http://4programmers.net/Forum/505669#id505669

Zamiast char elem w argumencie daj predykat porównujący i w kodzie zamiast porównania daj wywołanie predykatu z argumentem

0

No tylko jest taki problem, że potrzebuję nie tylko najdłuższy ciąg, ale i jego typ :/ A potem muszę jeszcze wyszukać najkrótszy ciąg :(

0

no to mówię, daj predykat zamiast elementu do porównania...

ech, jak to programowanie imperatywne odbija się ludziom na wnioskowaniu.

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