Ver Mensaje Individual
  #15 (permalink)  
Antiguo 21/05/2014, 08:18
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Contar Palabras de una frase? string

El reemplazar el punto por el espacio en blanco me parece lo mas sencillo, es fácil de realizar y de comprender, en mi opinión.

El usar find() para encontrar "." y hacer reparaciones en ese caso recorre el string también (en la implementacion interna), de modo que hacerlo al inicio explícitamente para reemplazar no tiene un costo superior. Lo malo, en mi opinion, que tiene usar find() e índices es que esa solucion al usarlos puede tener errores o condiciones de bordes que considerar. Me parece mejor, en este caso, usar la funcionalidad ya implementada por el tokenizador.

El nuevo código de cuenta() que reemplaza el punto por espacio en blanco y luego usa el comportamiento normal de tokenizacion del istringstream podria entonces ser escrito asi:

Código C++:
Ver original
  1. int cuenta( string s ) {
  2.     std::replace( s.begin(), s.end(), '.', ' ' );  // <-- reemplazo aqui
  3.  
  4.     istringstream is(s);
  5.     string token;
  6.     int cuenta = 0;
  7.  
  8.     while( is >> token ) { ++cuenta; }
  9.  
  10.     return cuenta;
  11. }

Básicamente similar al anterior, pero considera los problemas relacionados con el punto en medio o al final que se ha identificado.

std::replace() está en algorithm, hay que #incluir <algorithm> para usarlo.
__________________
Visita mi perfil en LinkedIn