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

Código
cout << "Ingrese una frase: "; getline(cin, frase);