Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/08/2016, 04:37
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Contar caracteres 'e' en una frase

Código C:
Ver original
  1. int main()
  2. {
  3.   char buffer[100];
  4.  
  5.   printf("Introduce una frase\n");
  6.   scanf("%s",buffer);
  7.   printf("%s\n",buffer);
  8. }

Si ejecutas el ejemplo y metes una frase con espacios verás que la respuesta que te devuelve el programa únicamente incluye la primera palabra... que es justo como se espera que funcione scanf.

Hay alternativas como juguetear un poco con el scanf para que sea capaz de leer toda la línea:

Código C:
Ver original
  1. scanf("%[^\n]",buffer);

Pero no es una opción segura porque no puedes controlar lo que introduce el usuario. Si tu buffer es de 10 caracteres y el usuario introduce una línea de 20 caracteres estarás pisando 11 bytes de memoria.

Siempre podrías limitar la lectura... pero la sintaxis de scanf no hace más que complicarse:

Código C:
Ver original
  1. scanf("%10[^\n]",buffer);

Una opción muy sencilla es leer caracter a caracter la entrada del teclado:

Código C:
Ver original
  1. int total=0;
  2. while( 1 )
  3. {
  4.   char c = getchar();
  5.   if( feof(stdin) ) break;
  6.   total += ( c == 'e' );
  7. }

Si no te gusta el código o te parece complejo de leer te facilito una opción más básica:

Código C:
Ver original
  1. int total=0;
  2. while( 1 )
  3. {
  4.   char c = getchar();
  5.  
  6.   if( feof(stdin) )
  7.     break;
  8.  
  9.   if( c == 'e' )
  10.     total++;
  11. }

Al salir del bucle tendrás en total el número de caracteres buscado.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.