bucle con char

Iniciado por lukaszg_15, 1 Abril 2014, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

lukaszg_15

Realizar un programa que lea palabras hasta que se introduzca "fin".


Siempre he usado el int para parar mis bucles o sino los hacia con for, pero no se como podria hacer un bucle para que escribiendo fin se detuviese el programa, se que con int seria así:

Código (cpp) [Seleccionar]
#include<iostream>

using namespace std;

int main(){
   
   
    int palabra;
 

    while (palabra != 1){cout << "Introduzca palabras<escriba fin para parar el programa>: ";
    cin >> palabra;
    cout<<endl;}
   

   

system("pause");
return 0;
    }


la pregunta entera es esta pero solo dudo en eso :


. Realizar un programa que lea palabras hasta que se introduzca "fin",
mostrando una estadística de las longitudes de las palabras, es decir, el número total
de palabras de longitud 1 que se hayan introducido, el total de longitud 2, etc. La máxima
longitud de las palabras deberá ser de 25 caracteres. Una posible salida de este programa sería:
Palabras longitud 1: 0
Palabras longitud 2: 10
...
Palabras longitud 25:

eferion

un while se ejecuta hasta que la condición devuelva false o, en su defecto 0. Es decir, no está limitada a enteros.

Tu tienes que hacer una comparación dentro del while para que el bucle se repita hasta que la palabra elegida coincida con "fin". Dado que usas la clase string es tan sencillo como echar mano a los operadores, en concreto el operador != que, curiosamente, retorna un booleano.

El resto te lo dejo a ti, que es como se aprende.

Un saludo.

vangodp


amchacon

Palabra no está inicializada cuando llegas al bucle...
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan


Y para variar falta la librería cstdlib para el system ... por no hablar de la indentación y de esa forma tan peculiar de poner las llaves....:huh: :huh: :huh:

¡¡¡¡ Saluditos! ..... !!!!



Yoel Alejandro

#5
Hay otra forma sutil, aunque elegante de hacerlo. Poniendo la cadena vacía como indicador para el fin del programa (en lugar de la cadena "fin").

Me explico, por ejemplo si usamos en C la función gets(), (ojo peligro, cuidado con desbordamiento de buffer) y al pedir la cadena presionas Enter, pues se recibe la cadena vacía, y finalizas el programa:

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {

   char buffer[100];

   gets( buffer );
   while ( *buffer != '\0' ) {
      printf("Usted escribio: %s\n", buffer);
      gets( buffer );
   }

   return 0;
}


Otra forma sería usando la secuencia de fin de archivo EOF para terminar el programa, aunque es algo más complicado, mejor para ti el primer método.

¿Alguien ofrece solución equivalente en C++?
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

engel lex

por fuera de las repuestas ya dadas, no se si yo estoy errando viendo la direccion que tomaron las respuestas...

puedes usar un "break;" para romper el ciclo y salir de el o un "return 0;" si estás en main, para cerrar el main y dar por finalizado el programa (al llegar a un return inmediatamente se sale de la función de se está sin importar si terminó o no)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

rir3760

Cita de: yoel_alejandro en  2 Abril 2014, 01:25 AM¿Alguien ofrece solución equivalente en C++?
Ya la indico eferion: verificar que la lectura sea exitosa y a continuacion comparar la palabra con la literal "fin". Mas o menos asi:
Código (cpp) [Seleccionar]
string palabra;

// ...

while (cin >> palabra && palabra != "fin"){
   cout << palabra << endl;

   // ...
}

Po supuesto hay que agregar el calculo de las frecuencias de las palabras, para ello se puede utilizar un vector.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

lukaszg_15

si me hace el bucle pero para leer las palabras que escribo en la consola me sirve? es decir, que tendria que hacer para que me reconozca las palabras introducidas? supongo que luego seria pasarlo todo por un strlen y compararlos

rir3760

Cita de: lukaszg_15 en  3 Abril 2014, 17:12 PMsi me hace el bucle pero para leer las palabras que escribo en la consola me sirve?
Si.

Cita de: lukaszg_15 en  3 Abril 2014, 17:12 PMsupongo que luego seria pasarlo todo por un strlen y compararlos
Lo usual en C es utilizar strlen, en el caso de C++ utilizas la función miembro "size", tienen el mismo efecto (resultar en el numero de caracteres de la cadena).

Para las frecuencias declaras un array (o un objeto de la clase vector, depende del enunciado) de 26 elementos (por simplicidad ignoras el primer elemento frec[0]), uno para cada frecuencia: frec[1] almacena el numero de palabras de longitud uno, frec[2] el numero de palabras de longitud dos, etc.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language