На каждой итерации вы должны помнить предыдущий проанализированный символ, а затем сравнивать с первой из оставшейся части массива. Если они одинаковы, добавьте единицу к длине текущей возможной самой длинной последовательности, если не длина равна 1 (длина новой возможной самой длинной последовательности). Конечно, вы также должны помнить самую высокую длину.
Что-то подобное?
#include <iostream>
unsigned int length_of_longest_consecutive(char previous,const char *line,int ll,int current_length)
{
if (*line==0) return ll>current_length?ll:current_length;
if (*line==previous) {
return length_of_longest_consecutive(*line,line+1,ll,current_length+1);
}
return length_of_longest_consecutive(*line,line+1,ll>current_length?ll:current_length,1);
}
int main() {
const char *a = "a!!!b!!!!ccccc!!d";
std::cout << length_of_longest_consecutive('\0',a,0,0) << std::endl;
}