Comme tu as eu plein de code, mais pas d'explications, en voici:

la fonction string::substr retourne une string.
l'opérateur [] (string::operator[]) retourne un char.

les opérateurs << de...