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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Guarda cadenas con espacios - como?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Guarda cadenas con espacios - como?  (Leído 21,843 veces)
d00ze13

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Guarda cadenas con espacios - como?
« en: 17 Mayo 2011, 23:25 pm »

Queria saber si se puede guardar una caddena con espacios en blanco y guardarlo en una variable de una estructura y luego guardarla en un fichero y que te pueda leer la cadena esa con sus espacios al leer el fichero, eso es posible?
pongo un ejemplo para que me entendais, faltaria la escritura y lectura a fichero
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct datos{
  5.     char texto[100];
  6. };
  7. int main(){
  8. struct datos persona;
  9.     cout<<"Introduce texto"<<endl;
  10.     cin>>persona.texto; // Aqui escribiriamos por ejemplo -> esto es una prueba con espacios
  11.  
  12.     cout<<persona.texto;
  13. }
  14.  


En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Guarda cadenas con espacios - como?
« Respuesta #1 en: 17 Mayo 2011, 23:42 pm »

No entiendo la pregunta, no te almacena en persona.texto el texto con espacios?


En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #2 en: 17 Mayo 2011, 23:43 pm »

Código
  1. #include <cstdio>
  2.  
  3. int main()
  4. {
  5. char cadena[100];
  6.  
  7. fgets(cadena, 100, stdin);
  8.  
  9. printf("%s", cadena);
  10.  
  11. getchar();
  12.  
  13. return 0;
  14. }

El texto se queda guardado en la cadena, que lógicamente puedes escoger el tamaño que te convenga, y simplemente luego abres el fichero y escribes el contenido. Igual no estaría de más que leyeras sobre cadenas y las funciones básicas de input y output:

http://www.cplusplus.com/doc/tutorial/arrays/
http://www.cplusplus.com/doc/tutorial/basic_io/

cin sólo lee hasta el primer espacio.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
« Última modificación: 12 Junio 2011, 10:43 am por Queta » En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
willyhunting

Desconectado Desconectado

Mensajes: 72



Ver Perfil WWW
Re: Guarda cadenas con espacios - como?
« Respuesta #3 en: 17 Mayo 2011, 23:45 pm »

Por supuesto que puedes leer una cadena con espacios y guardarla en un fichero, el espacio es un carácter como cualquier otro.
En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #4 en: 17 Mayo 2011, 23:47 pm »

Usando cin de esta manera, solamente puedes hasta el primer espacio en blanco.
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
d00ze13

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #5 en: 17 Mayo 2011, 23:48 pm »

ok todo aclarado mil thnks ! ; )
En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #6 en: 17 Mayo 2011, 23:50 pm »

¿Pero qué método usarás al final?
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
d00ze13

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #7 en: 18 Mayo 2011, 00:11 am »

pues aun no lo se, voy a probar varias y la que vea que mejor va, probare estas 2 de momento pero ya mañana que madrugo y sino luego no me tengo, ya os contare cual me fue mejor y el codigo por si le es de utilidad a alguien

fgets(cadena, 100, stdin);

string cadena;
getline(cin,cadena);
En línea

d00ze13

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #8 en: 18 Mayo 2011, 21:25 pm »

Buena ya estoy con el codigo que mas o menos lo tengo salvo que cuando hace la segunda vez el bucle al introducir s me carga la cadena sola sin yo introducirle nada, alguien ve algun fallo?
Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. void escribe(char **name){
  6.        ofstream fs("pw");
  7.        fs<<*name<<endl;
  8.        fs.close();
  9. }
  10. void lee(char **cadena){
  11.        ifstream fe("pw");
  12.        fe.getline(*cadena,30);
  13.        cout<<*cadena<<endl;
  14.  
  15.        fe.close();
  16. }
  17. int main(void){
  18.        int cont=0;
  19.        char **cad;
  20.        char resp='s';
  21.        cad=new char *[100];
  22.        do{
  23.                cad[cont]=new char[100];
  24.                cout<<"Cadena?: ";
  25.                fgets(cad[cont],100,stdin);
  26.                cont++;
  27.  
  28.                escribe(cad);
  29.                lee(cad);
  30.        cout<<"Mas [s/n]?: ";
  31.        cin>>resp;
  32.        }while(resp=='s');
  33.  
  34.        for(int i=0;i<cont;i++)
  35.                delete[]cad[i];
  36.        delete[]cad;
  37.        return 0;
  38. }
  39.  
  40.  
En línea

Lx

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Guarda cadenas con espacios - como?
« Respuesta #9 en: 19 Mayo 2011, 03:44 am »

Aquí te dejo tu código corregido ...

Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. void escribe(char **name, int cont){
  6.        ofstream fs("pw.txt");
  7.        for( int i = 0; i < cont; i++){
  8.            fs<<name[i]<<endl;
  9.        }
  10.        fs.close();
  11. }
  12. void lee( int cont){
  13.  
  14.        char cadena[100];
  15.  
  16.        ifstream fe("pw.txt");
  17.        for( int i = 0; i < cont; i++){
  18.            fe.getline(cadena,100);
  19.            cout<<cadena<<endl;
  20.        }
  21.        fe.close();
  22. }
  23. int main(void){
  24.        int cont=0;
  25.        char **cad;
  26.        char resp='s';
  27.        cad=new char *[100];
  28.        do{
  29.                cad[cont]=new char[100];
  30.                cout<<"Cadena?: ";
  31.                cin.getline(cad[cont],100);
  32.  
  33.                cont++;
  34.                escribe(cad, cont);
  35.                lee(cont);
  36.                cout<<"Mas [s/n]?: ";
  37.                cin>>resp;
  38.                while(getchar()!='\n'); // esto elimina la basura del buffer que hacía que se salte la lectura de la cadena.
  39.        }while(resp=='s');
  40.  
  41.        for(int i=0;i<cont;i++)
  42.                delete[]cad[i];
  43.        delete[]cad;
  44.        return 0;
  45. }

El error en tu código está en que tú asumes que *cad es el conjunto de todos los cad[n], pero no es así, *cad es igual - únicamente - a cad[0], ya que *cad sólo apunta a la dirección del 1r elemento de ese vector de cadenas.
« Última modificación: 19 Mayo 2011, 04:06 am por Lx » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al leer cadenas con espacios [C++]
Programación C/C++
Don Pollo 3 21,498 Último mensaje 20 Mayo 2011, 03:49 am
por Lx
Leer cadenas tipo string con espacios
Programación C/C++
luisda2994 4 20,337 Último mensaje 24 Julio 2012, 19:55 pm
por luisda2994
lo mas basico, como manipular cadenas
Programación C/C++
rod00x3 2 2,119 Último mensaje 7 Enero 2013, 20:57 pm
por Stakewinner00
Como remover espacios en C/C++?
Programación C/C++
t4r0x 5 3,471 Último mensaje 17 Junio 2014, 14:22 pm
por leosansan
¿Como dejar espacios en un int?
Programación C/C++
LuisUvtol 1 2,107 Último mensaje 4 Mayo 2020, 18:00 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines