Autor
|
Tema: bucle con char (Leído 7,770 veces)
|
lukaszg_15
Desconectado
Mensajes: 26
|
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í: #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:
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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.
|
|
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Palabra no está inicializada cuando llegas al bucle...
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
|
En línea
|
|
|
|
Yoel Alejandro
|
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: #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++?
|
|
« Última modificación: 2 Abril 2014, 01:30 am por yoel_alejandro »
|
En línea
|
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)
|
|
|
En línea
|
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
Desconectado
Mensajes: 1.639
|
¿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: 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
|
|
|
En línea
|
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
Desconectado
Mensajes: 26
|
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
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
si me hace el bucle pero para leer las palabras que escribo en la consola me sirve? Si. supongo 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
|
|
|
En línea
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda (Parar bucle con dato boolean) [bucle while]
Java
|
Dem0ny
|
5
|
18,334
|
17 Diciembre 2008, 17:43 pm
por Dem0ny
|
|
|
duda doble puntero char a matriz de char
Programación C/C++
|
neo_from_cs_matrix
|
3
|
6,065
|
5 Septiembre 2011, 03:53 am
por rir3760
|
|
|
Lectura de matríz de char como char** o DWORD*
Programación C/C++
|
david_BS
|
3
|
3,301
|
20 Febrero 2012, 20:49 pm
por Eternal Idol
|
|
|
Como pasar una cadena char a hexadecimal por argumento a un constant char?
Programación C/C++
|
ahaugas
|
3
|
4,948
|
13 Enero 2013, 14:09 pm
por ahaugas
|
|
|
Problema conversión Unsigned char a char
Programación C/C++
|
juliodiez
|
4
|
2,665
|
19 Enero 2013, 04:34 am
por juliodiez
|
|