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


 


Tema destacado: [Aporte] Mejores practicas en Java


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, YreX-DwX)
| | |-+  Manejo de strings enormes y caracteres?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Manejo de strings enormes y caracteres?  (Leído 554 veces)
@XSStringManolo
Colaborador
***
Desconectado Desconectado

Mensajes: 1.967


Turn off the red ligth


Ver Perfil WWW
Manejo de strings enormes y caracteres?
« en: 10 Junio 2019, 22:59 »

Estoy haciendo un cifrado Cesar. El descifrado muestra las 255 posibles opciones del texto y lo guarda en el string.

En la funcion despues de crear el string en el que guardare el texto uso nombredelstring.reserve(1000000);
Para tener espacio en el string.

Despues de guardar todo en el string uso
nombredelstring.shrink_to_fit();
Para ajustar el tamaño del string a sus necesidades reales.

El problema lo tengo despues de la llamada a la funcion en main cuando intento tomar datos por entrada con cin. Se me salta varios cin y no deja al usuario del programa introducir los valores.

El programa es muy sencillo. Lo pondre resumido.
Código
  1. string Funcion(string texto)
  2. {
  3. string textosalida;
  4.   for (int vueltas =1; vueltas <256; ++vueltas)
  5.   {
  6.    textosalida += "\nDespues de este mensaje ves la opcion ";
  7.         for (auto iter = texto.begin(); iter != texto.end(); ++iter)
  8.         {
  9.          textosalida += (*iter + vueltas);
  10.         }
  11.    }
  12. return textosalida;
  13. }
  14.  
  15. int main()
  16. {
  17. string blabla;
  18. cout <<"bla bla";
  19. getline(cin, blabla);
  20.  
  21. string texto = Funcion(blabla);
  22. cout << texto;
  23.  
  24. int guardar =4;
  25. //Aqui el problema:
  26. cout << endl << endl << "pulsa 1 para bla bla bla" <<endl;
  27. cin >> guardar;
  28. //Se salta el cin anterior y entra en el siguiente if sin razon logica aparente.
  29.  
  30. if (guardar ==1)
  31. {
  32. cout << "Guardando en documento, pon el titulo" <<endl;
  33. //getline...
  34. }
  35.  
  36. cin.get()
  37. return 0;
  38. }
  39.  
Suponí que era un error del buffer. Asique probe con cin.ignore(); Pero debe ser algun fallo de memoria o algo que no sé como solucionar.

En el ejemplo de meterle abc como texto a la funcion guarda lo siguiente en el string:
Despues de este mensaje ves la opcion abc
Despues de este mensaje ves la opcion bcd
Despues de este mensaje ves la opcion cde
...
Despues de este mensaje ves la opcion abc

Da 256 vueltas para mostrar todas las opciones posibles del texto cifrado para que ek usuario las mire y descubra cual era el texto original.
Por lo que el string puede ser enorme ya que va a multiplicar por 256 cualquier texto que introduzca el usuario.

A qué se debe el fallo?
Debería usar vectores de strings? O se puede hacer con un string?

Si necesitais el código completo, lo paso, pero poco más que eso es.

Como la salida es muy grande queria ponerle opcion para escribir en un documento de texto la salida y abrir el documento desde el programa para poder ver todas las posibilidades.


« Última modificación: 10 Junio 2019, 23:04 por string Manolo » En línea

YreX-DwX
Moderador
***
Desconectado Desconectado

Mensajes: 716



Ver Perfil
Re: Manejo de strings enormes y caracteres?
« Respuesta #1 en: 11 Junio 2019, 00:28 »

No tengo ningún problema con ese código. Lo he probado primero con una versión muy simple (simplemente el <getline()> y el <cin>) y funciona bien así que después he probado tu código y dejando al margen unos caracteres extraños (decir que estoy en Linux) no he tenido ningún problema de que se salte el <cin>.
Prueba a cerrar el proyecto y volver a abrirlo, puede que sea un problema de eso. Sino no sé qué puede ser... :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
@XSStringManolo
Colaborador
***
Desconectado Desconectado

Mensajes: 1.967


Turn off the red ligth


Ver Perfil WWW
Re: Manejo de strings enormes y caracteres?
« Respuesta #2 en: 11 Junio 2019, 01:52 »

Muchas gracias. Ya encontré el problema. Lo arregle con un cin.ignore();
En línea

apuromafo CLS


Desconectado Desconectado

Mensajes: 1.387



Ver Perfil WWW
Re: Manejo de strings enormes y caracteres?
« Respuesta #3 en: 11 Junio 2019, 03:57 »

no veo problema, si podrias cambiar un pequeño orden y probar que tal va funcionando, defines la variable int guardar como 4, como un int, siendo que cuando colocan cin puede tomarlo como:
Citar
#include "iostream"
#include "string"

using namespace std;

de:
Código
  1. int guardar =4;
  2. //Aqui el problema:
  3. cout << endl << endl << "pulsa 1 para bla bla bla" <<endl;
  4. cin >> guardar;


a

Código
  1. cout << endl << endl << "pulsa 1 para bla bla bla" << endl;
  2. //ahi el programa imprimio información y la variable seteada temporal establecida //posiblemente fue anulada
  3. int guardar; // defines que lo escrito es guardar
  4. // guardar string
  5. cout << "has escrito " << guardar<< ". Gracias por la nuestra aplicación" << endl;
  6. cin >> guardar;
  7. << nombre <<


la idea de práctica seria

Código
  1. #include "iostream"
  2. #include "string"
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    cout << "Hola! Este es un ejemplo en C++ foroelhacker dotnet" << "\n" << "Por favor ingrese su nombre:" << endl; //La instrucción \n es un salto de línea Mostrando los textos separados
  9.  
  10.   string nombre;//En esta variable estará almacenado el nombre ingresado.
  11.   cin >> nombre; //Se lee el nombre
  12.  
  13.   cout << "Bienvenido al sistema " << nombre << ". Gracias por usar nuestra aplicación" << endl;
  14.  
  15.  
  16.   return 0;
  17. }


veo que lo has solucionado, pero igual yo creo que es sobre la variable que estableces o bien simplemente es problema de gui o entra al ciclo del if antes.

Saludos
Apuromafo

En línea

@XSStringManolo
Colaborador
***
Desconectado Desconectado

Mensajes: 1.967


Turn off the red ligth


Ver Perfil WWW
Re: Manejo de strings enormes y caracteres?
« Respuesta #4 en: 11 Junio 2019, 04:20 »

El int guardar = 4 lo puse para probar el programa en el momento. Siempre pongo cosas random para probar el programa rápido antes de que se me escapen las ideas de la cabeza y no sepa que estaba haciendo por ponerme a implementar otra cosa.

Ya me va todo perfect! Muchas gracias.

Ahora ando con la api de windows a ver si consigo tomar el string del usuario mediante un EDIT control o un InputBox o algo que me sirva.

Estoy a buscar ejemplos pero no encuentro ni el primero.
Estoy ahora mismo probando con uno en C del año de la polka con buffers, chars, punteros, etc. Seguro que se puede hacer con strings de C++ pero no encuentro nada de momento y el ejemplo está incompleto asique o busco en otros libros, o me rompo la cabeza para entenderlo e intentar traducirlo a C++ si tengo suerte.
No puede ser tan complicado...

Quiero hacer una ventana rollo mini bloc de notas para escribir. Con un boton que sirva de enter y obtener el input del usuario en una variable string.

estuve haciendo menus y esas cosas con un .rc y un resource.h escribiéndolo a mano porque uso codeblocks. Igual se puede hacer desde ahí también. Ni idea.

Si sabeis como se hace genial!
Si no, no pasa nada. Si no lo encuentro yo seguiré viendo otras ventanas, etc hasta que controle lo suficiente como para que se me ocurra como hacerlo.

Igual puedo robarle al user el contenido del clipboard con un boton o algo así. Por falta de ideas no va a ser xD
En línea

apuromafo CLS


Desconectado Desconectado

Mensajes: 1.387



Ver Perfil WWW
Re: Manejo de strings enormes y caracteres?
« Respuesta #5 en: 11 Junio 2019, 17:56 »

existen mas componentes que un edit, yo apostaria por un memo o richtext (rtf) (tienen mayor capacidad de almacenaje de información.
ideas rapidas en un notepad:

un memo, con menu, con Status bar, busqueda de dialogo, abrir/cerrar archivos
yo tengo un source y exe de un notepad pero hecho en delphi (creado por Softdat CLS) pero como no es mio no puedo compartirlo aqui ,  espero a futuro el lo comparta a github, ahi podria indexarlo.

aqui en github hay un ejemplo de un notepad en c++
https://github.com/genuinelucifer/mypad


hay muchas cosas posibles, y dependerá de la información que manejes a mano.
Todo lo que esté bien modelado te saldrá bien, recuerda verificar siempre que al cerrar si quiere guardar los cambios y/o opciones.

Saludos
« Última modificación: 11 Junio 2019, 18:32 por apuromafo » En línea

@XSStringManolo
Colaborador
***
Desconectado Desconectado

Mensajes: 1.967


Turn off the red ligth


Ver Perfil WWW
Re: Manejo de strings enormes y caracteres?
« Respuesta #6 en: 11 Junio 2019, 20:15 »

Muchas gracias. Entre el link y los conesjos que me has dado, y los que me ha dado también uno de los moderadores, he sido capaz de encontrar un montón de ejemplos. Ahora los estoy probrando para ver cuales me sirven e implementarlos en uno de los esqueletos que tengo hechos.
Ahora a gestionar y asimilar toda la info con calma!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
manejo de strings
Programación Visual Basic
elrecar 6 1,450 Último mensaje 16 Octubre 2007, 20:28
por elrecar
Duda sobre manejo de strings en bash
Scripting
rastanthology 7 3,720 Último mensaje 28 Septiembre 2010, 00:00
por rastanthology
Funciones PROPIAS para manejo de strings en C/C++ « 1 2 »
Programación C/C++
Álvaro G. Tenorio 12 4,452 Último mensaje 3 Septiembre 2013, 09:44
por eferion
MANEJO DE STRINGS EN VB.NET
.NET (C#, VB.NET, ASP)
igustin10 2 970 Último mensaje 21 Diciembre 2016, 15:49
por igustin10
Manejo de Strings
Programación General
_whiteBird 6 600 Último mensaje 26 Junio 2020, 02:37
por Tachikomaia
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines