Me parece un poco ambiguo lo de cada vez que llegue a una 'a'. O sea, si la cadena no empieza con 'a', como en "xyzajndfvaorncak89s", ¿la primera subcadena debería ser xyz, o ajndfv? Como lo planteas parecería que es la primera, pero a mí me parece más lógica la segunda, así que me enfoco en ella.
Una opción es la función strtok, que ya te mencionaron, pero ten en cuenta que es para cadenas de C (arreglos o punteros char). Aunque hay forma de acceder al buffer interno de string, por varias razones podría no funcionar con strtork, además de que esta función es "destructiva"; es decir, modifica la cadena origen, por lo que al final tu string quedaría alterado. En todo caso, si quieres usar strtok, sería mejor crear una copia de tu string en un arreglo char, y trabajar sobre ella.
Una alternativa es usar las funciones miembro de string
find() y
substr(). Un ejemplo para encontrar la primera subcadena:
std::string::size_type inicio, fin = 0;
inicio = cadena.find('a', fin);
// Si se encontro una letra 'a'
if (inicio != std::string::npos) {
fin = cadena.find('a', inicio + 1);
subcadena = cadena.substr(inicio, fin - inicio);
}
Ya sólo te faltaría crear el programa y hacer un bucle basándote en esto.