elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] ¿Cómo consigo leer un número indefinido de caracteres?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C++] ¿Cómo consigo leer un número indefinido de caracteres?  (Leído 12,124 veces)
HijoDePuta

Desconectado Desconectado

Mensajes: 6


Ver Perfil
[C++] ¿Cómo consigo leer un número indefinido de caracteres?
« en: 5 Agosto 2013, 11:14 am »

Buenas,

Entenderéis esto mejor si os pongo el enunciado de un problema que me causa esta duda:

Citar
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 Desconectado

Mensajes: 583



Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #1 en: 6 Agosto 2013, 13:04 pm »

secuencia de caracteres
Citar
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 Desconectado

Mensajes: 1.248


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #2 en: 6 Agosto 2013, 13:20 pm »

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

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #3 en: 6 Agosto 2013, 13:23 pm »

String:
http://www.cplusplus.com/reference/string/string/

Código
  1. string Texto = "Una cadena de caracteres";
  2.  
  3. Texto += " relleno";
  4. Texto += " mas relleno";
  5.  
  6. cout<<Texto;
  7. cout<<Texto.size(); // Tamanyo de la cadena
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
HijoDePuta

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #4 en: 7 Agosto 2013, 11:30 am »

Muchas gracias lo pondré en práctica a ver que tal ^^
En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #5 en: 8 Agosto 2013, 10:15 am »

Quizás te puede servir este código

Código
  1. #include <stdio.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    int Ascii;
  9.    int Longitud;
  10.    int n;
  11.    int Contador = 0;
  12.  
  13.    printf("Cuanto ocupara su cadena? (El punto se pone automaticamente): ");
  14.    cin >> Longitud;
  15.  
  16.    char *Long_Cadena = new char [Longitud + 1];
  17.  
  18.    printf("\nEscriba %d caracteres seguidos: ", Longitud);
  19.    fflush(stdin);
  20.    fgets(Long_Cadena, Longitud + 1, stdin);
  21.  
  22.    printf("\nSu cadena con %d caracteres es: ", Longitud);
  23.    cout << Long_Cadena << "." << "\n";
  24.  
  25.    for(n=0; n<=Longitud - 1; n++)
  26.        {
  27.            printf("\nCaracter = %c - Tabla Ascii = %d - Valor Hex = %x", Long_Cadena[n], Long_Cadena[n], Long_Cadena[n]);
  28.            fflush(stdin);
  29.            Contador++;
  30.  
  31.        }
  32.  
  33.    delete[] Long_Cadena;
  34.    cout << "\n\nCaracteres Leidos: " << Contador << "\n";
  35.    cout << "\nPresiona Intro para fianlizar...\n";
  36.    fflush(stdin);
  37.    getchar();
  38. }

Saludos :silbar:
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #6 en: 8 Agosto 2013, 10:36 am »

¡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:
Código
  1.    char lector[11];
  2.    char repeticiones[256];
  3.    int i;
  4.  
  5.    memset(repeticiones,0,256);
  6.  
  7.    do{
  8.        fgets(lector,10,stdin);
  9.  
  10.        for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++)
  11.            repeticiones[lector[i]]++;
  12.  
  13.    }while(!strchr(lector,'.'));
  14.  
  15.    for(i = 0 ; i < 256 ; i++)
  16.    {
  17.        if(repeticiones[i])
  18.            printf("%c: %d repeticiones\n",i,repeticiones[i]);
  19.    }
  20.  

Pues no, te pide la posición en la tabla ASCII de los caracteres y el numero de caracteres. El código queda así:
Código
  1.    char lector[11];
  2.    char repeticiones[256];
  3.    int i,total = 0;
  4.  
  5.    memset(repeticiones,0,256);
  6.  
  7.    do{
  8.        fgets(lector,10,stdin);
  9.  
  10.        for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++)
  11.            repeticiones[lector[i]]++;
  12.  
  13.    }while(!strchr(lector,'.'));
  14.  
  15.    for(i = 0 ; i < 256 ; i++)
  16.    {
  17.        if(repeticiones[i])
  18.            printf("%c: ASCII %d\n",i,i);
  19.        total += repeticiones[i];
  20.    }
  21.  
  22.    printf("%d caracteres\n",total);
  23.  

¡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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #7 en: 8 Agosto 2013, 17:35 pm »

Pues no, te pide la posición en la tabla ASCII de los caracteres y el numero de caracteres. El código queda así:
Código
  1. char lector[11];
  2. char repeticiones[256];
  3. int i,total = 0;
  4.  
  5. memset(repeticiones,0,256);
  6.  
  7. do{
  8.  fgets(lector,10,stdin);
  9.  
  10.  for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++)
  11.      repeticiones[lector[i]]++;
  12.  
  13. }while(!strchr(lector,'.'));
  14.  
  15. for(i = 0 ; i < 256 ; i++)
  16. {
  17.  if(repeticiones[i])
  18.      printf("%c: ASCII %d\n",i,i);
  19.  total += repeticiones[i];
  20. }
  21.  
  22. printf("%d caracteres\n",total);
  23.  
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:
Código
  1. char lector[11];
  2. char repeticiones[256] = {0};
  3. int i,total = 0;
  4.  
  5. do {
  6.  fgets(lector,10,stdin);
  7.  
  8.  for(i = 0 ; lector[i] && lector[i] != '\n' && lector[i] != '.' ; i++)
  9.      repeticiones[lector[i]]++;
  10.  
  11. }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 Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #8 en: 8 Agosto 2013, 22:24 pm »

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 Desconectado

Mensajes: 6


Ver Perfil
Re: [C++] ¿Cómo consigo leer un número indefinido de caracteres?
« Respuesta #9 en: 9 Agosto 2013, 13:10 pm »

Hola :)


Muchas gracias a todos, he conseguido lo que pretendía y sin vuestra ayuda no habría podido :P 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 :D

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
leer caracteres de un archivo
Programación C/C++
m@o_614 8 6,208 Último mensaje 10 Septiembre 2013, 04:25 am
por rir3760
Saber si es numero o caracteres en C++
Programación C/C++
tizerlks1 3 31,135 Último mensaje 16 Septiembre 2013, 06:35 am
por tizerlks1
¿Limitar número de caracteres en un input con edatagrid?
Desarrollo Web
Clavo Oxidado 9 6,235 Último mensaje 26 Noviembre 2014, 19:17 pm
por Clavo Oxidado
Cómo leer número de un txt.
Programación C/C++
Wilber592 9 2,528 Último mensaje 22 Noviembre 2018, 18:48 pm
por Wilber592
Como leer una cadena de caracteres vacia
Programación C/C++
josueroddy 1 2,362 Último mensaje 23 Octubre 2021, 00:41 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines