#include <iostream>
using namespace std;
int main() {
cout << " *** BinaryCont by HeDo *** " << endl << endl;
cout << " Inserisci la sequenza di 0 e 1, per terminare immetti altro valore" << endl;
char c = NULL;
// Massima sequenza di zeri che abbiamo trovato fino ad ora
int iMaxZeroSequence = 0;
// Massima sequenza di uno che abbiamo trovato fino ad ora
int iMaxOneSequence = 0;
// Accumulatore con il conteggio di zeri
int iTempZeroSequence = 0;
// Accumulatore con il conteggio di uno
int iTempOneSequence = 0;
// Ultimo carattere inserito ('1' o '0')
char cLastDigit = NULL;
// Se il ciclo è finito
bool bEnd = false;
do {
// Chiedo il valore da tastiera
cin >> c;
// A seconda di cosa è stato inserito
switch(c) {
// Se è uno '0'
case '0':
// Controllo se è il primo '0' dopo una sequenza di '1'
if (cLastDigit == '1') {
// Se la sequenza di '1' appena finita è più
// lunga della più lunga trovata fino ad ora
if (iTempOneSequence > iMaxOneSequence)
// Nuova sequenza di '1' più lunga!
iMaxOneSequence = iTempOneSequence;
// Azzero il conteggio della sequenza di '1'
iTempOneSequence = 0;
}
// Incremento il conteggio degli zeri inseriti
iTempZeroSequence++;
break;
// Se è un '1'
case '1':
// Controllo se è il primo '1' dopo una sequenza di '0'
if (cLastDigit == '0') {
// Se la sequenza di '0' appena finita è più
// lunga della più lunga trovata fino ad ora
if (iTempZeroSequence > iMaxZeroSequence)
// Nuova sequenza di '0' più lunga!
iMaxZeroSequence = iTempZeroSequence;
// Azzero il conteggio della sequenza di '0'
iTempZeroSequence = 0;
}
// Incremento il conteggio degli uno inseriti
iTempOneSequence++;
break;
// Se è stato inserito altro carattere
default:
// Imposto il flag di ciclo terminato
bEnd = true;
// A seconda dell'ultimo carattere valido inserito
// controllo se è stata trovata una nuova sequenza
// più lunga sia di '0' che di '1'
if(cLastDigit == '1') {
if (iTempOneSequence > iMaxOneSequence)
iMaxOneSequence = iTempOneSequence;
} else {
if (iTempZeroSequence > iMaxZeroSequence)
iMaxZeroSequence = iTempZeroSequence;
}
break;
}
// Salvo l'ultimo carattere inserito
cLastDigit = c;
// Il ciclo va avanti se non è stato
// inserito un carattere non valido
} while(!bEnd);
cout << "Più lunga sequenza di '0': " << iMaxZeroSequence << endl;
cout << "Più lunga sequenza di '1': " << iMaxOneSequence << endl;
system("PAUSE");
return 0;
}