Esto
Código
solo lee la primera palabra. No lee la frase completa.
cin >> frase;
Cierto, y yo que me había centrado en la función no me estaba dando cuenta de eso . Ya he cambiado el código para que funcione:
Código
cout << "Ingrese una frase: "; getline(cin, frase);