Autor
|
Tema: [C++] ¿Cómo consigo leer un número indefinido de caracteres? (Leído 12,707 veces)
|
HijoDePuta
Desconectado
Mensajes: 6
|
Buenas, Entenderéis esto mejor si os pongo el enunciado de un problema que me causa esta duda: Escribe un programa que, dada una secuencia de caracteres terminada en un punto, nos devuelva la posición en la tabla ASCII asociada a cada uno de los caracteres leídos. Posteriormente y antes de finalizar mostraremos por pantalla el número total de caracteres leídos. Mi primera duda es que no comprendo a qué se refiere con secuencia, si a una palabra (como "cosa") o si a una serie de caracteres ("c" - "o" - "s"...). En cualquier caso, mi problema es que yo no sé de antemano cuantos caracteres va a tener la palabra, si 3, 6 o 1200. Por tanto no sé cuantas variables char tengo que crear. ¿Existe alguna manera de leer un número indefinido de caracteres y trabajar con ellos? Gracias de antemano y saludos.
|
|
« Última modificación: 6 Agosto 2013, 11:15 am por HijoDePuta »
|
En línea
|
|
|
|
flony
Desconectado
Mensajes: 584
|
secuencia de caracteres holacomoestas eso es una secuencia de caracteres...o sea un conjunto de letras que puede ser o no una palabra. Podes trabajar con vectores(pero tienen limite, la idea seria meterle un vector grande ) podrías usar la libreria string...si es que estas en C++
|
|
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Mi primera duda es que no comprendo a qué se refiere con secuencia, si a una palabra (como "cosa") o si a una serie de caracteres ("c" - "o" - "s"...). Una secuencia es que el usuario escriba en pantalla, por ejemplo, "abcdf hola como estas no se que poner". En c tienes varias opciones: * Puedes proponerte crear un vector lo suficientemente grande como para que sea dificil llenarlo... 1000 caracteres por ejemplo. * Una opción más elegante sería implementar una función que permitiese incrementar el tamaño del buffer de forma dinámica según se llene... para hacer esto tendría que crear un nuevo buffer de un tamaño superior al actual, copiar los datos del buffer viejo al nuevo y liberar la memoria del viejo buffer. En c++, utilizando las clases stream no deberías tener problemas por overflow, ya que estas clases ya incorporan sus propios mecanismos de protección.
|
|
|
En línea
|
|
|
|
|
HijoDePuta
Desconectado
Mensajes: 6
|
Muchas gracias lo pondré en práctica a ver que tal ^^
|
|
|
En línea
|
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
Quizás te puede servir este código#include <stdio.h> #include <iostream> using namespace std; int main() { int Ascii; int Longitud; int n; int Contador = 0; printf("Cuanto ocupara su cadena? (El punto se pone automaticamente): "); cin >> Longitud; char *Long_Cadena = new char [Longitud + 1]; printf("\nEscriba %d caracteres seguidos: ", Longitud); fflush(stdin); fgets(Long_Cadena, Longitud + 1, stdin); printf("\nSu cadena con %d caracteres es: ", Longitud); cout << Long_Cadena << "." << "\n"; for(n=0; n<=Longitud - 1; n++) { printf("\nCaracter = %c - Tabla Ascii = %d - Valor Hex = %x", Long_Cadena[n], Long_Cadena[n], Long_Cadena[n]); fflush(stdin); Contador++; } delete[] Long_Cadena; cout << "\n\nCaracteres Leidos: " << Contador << "\n"; cout << "\nPresiona Intro para fianlizar...\n"; fflush(stdin); getchar(); }
Saludos
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! Lo único que te pide es saber cual es el ASCII y las repeticiones de los caracteres introducidos hasta el primer punto. No te hace falta para nada saber cuantos caracteres tienes que leer: char lector[11]; char repeticiones[256]; int i; do{ for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++) repeticiones[lector[i]]++; for(i = 0 ; i < 256 ; i++) { if(repeticiones[i]) printf("%c: %d repeticiones\n",i ,repeticiones [i ]); }
Pues no, te pide la posición en la tabla ASCII de los caracteres y el numero de caracteres. El código queda así: char lector[11]; char repeticiones[256]; int i,total = 0; do{ for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++) repeticiones[lector[i]]++; for(i = 0 ; i < 256 ; i++) { if(repeticiones[i]) total += repeticiones[i]; } printf("%d caracteres\n",total );
¡Saludos!
|
|
« Última modificación: 8 Agosto 2013, 10:46 am por do-while »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Pues no, te pide la posición en la tabla ASCII de los caracteres y el numero de caracteres. El código queda así: char lector[11]; char repeticiones[256]; int i,total = 0; do{ for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++) repeticiones[lector[i]]++; for(i = 0 ; i < 256 ; i++) { if(repeticiones[i]) total += repeticiones[i]; } printf("%d caracteres\n",total );
En el bucle do ... while no es necesario llamar a strchr ya que el bucle interno terminara cuando el carácter "lector[ i ]" sea igual a '\0', '\n' o '.'. Por ello basta con una comparación: char lector[11]; char repeticiones[256] = {0}; int i,total = 0; do { for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++) repeticiones[lector[i]]++; }while (lector[i] != '.');
Y revisando con cuidado el enunciado me parece que no es necesario imprimir la frecuencia de cada carácter, en base a ello se pueden eliminar los arrays. 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
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
El código lo tenia hecho y modifique algo para que tuviera una idea de por donde empezar
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
HijoDePuta
Desconectado
Mensajes: 6
|
Hola Muchas gracias a todos, he conseguido lo que pretendía y sin vuestra ayuda no habría podido Al final he comprendido como hacerlo sin vectores (no los necesitaba ahí) y ya sé actuar con las secuencias con arrays, me habéis abierto los ojos Editado: Tenía un tochopost para nada, mi nueva duda era tonta, por eso edito :S
|
|
« Última modificación: 9 Agosto 2013, 13:26 pm por HijoDePuta »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
leer caracteres de un archivo
Programación C/C++
|
m@o_614
|
8
|
6,556
|
10 Septiembre 2013, 04:25 am
por rir3760
|
|
|
Saber si es numero o caracteres en C++
Programación C/C++
|
tizerlks1
|
3
|
31,428
|
16 Septiembre 2013, 06:35 am
por tizerlks1
|
|
|
¿Limitar número de caracteres en un input con edatagrid?
Desarrollo Web
|
Clavo Oxidado
|
9
|
6,791
|
26 Noviembre 2014, 19:17 pm
por Clavo Oxidado
|
|
|
Cómo leer número de un txt.
Programación C/C++
|
Wilber592
|
9
|
2,988
|
22 Noviembre 2018, 18:48 pm
por Wilber592
|
|
|
Como leer una cadena de caracteres vacia
Programación C/C++
|
josueroddy
|
1
|
2,751
|
23 Octubre 2021, 00:41 am
por K-YreX
|
|