El problema de contar es un clásico y está lleno de casos especiales.
Los programas ofrecidos pueden tener problemas para algunos casos especiales, de modo que sugiero revisarlos con cuidado.
Ejemplo de caso especial:
¿Como se comporta si el string ingresado son solo espacios en blanco? (el resultado deberia ser 0)
¿Que ocurre si hay espacio en blanco al inicio? ¿Al final? (no deberia haber diferencia respecto al mismo caso sin espacios al inicio o final)
etc.
Una alternativa de solución, que también puede tener problemas pero me parece mas sencilla es esta:
Código C++:
Ver originalint cuenta( string s ) {
istringstream is(s);
string token;
int cuenta = 0;
while( is >> token ) { ++cuenta; }
return cuenta;
}