Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: d00ze13 en 17 Mayo 2011, 23:25 pm



Título: Guarda cadenas con espacios - como?
Publicado por: d00ze13 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.  


Título: Re: Guarda cadenas con espacios - como?
Publicado por: naderST en 17 Mayo 2011, 23:42 pm
No entiendo la pregunta, no te almacena en persona.texto el texto con espacios?


Título: Re: Guarda cadenas con espacios - como?
Publicado por: Queta 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/arrays/)
http://www.cplusplus.com/doc/tutorial/basic_io/ (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.


Título: Re: Guarda cadenas con espacios - como?
Publicado por: willyhunting 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.


Título: Re: Guarda cadenas con espacios - como?
Publicado por: Queta en 17 Mayo 2011, 23:47 pm
Usando cin de esta manera, solamente puedes hasta el primer espacio en blanco.


Título: Re: Guarda cadenas con espacios - como?
Publicado por: d00ze13 en 17 Mayo 2011, 23:48 pm
ok todo aclarado mil thnks ! ; )


Título: Re: Guarda cadenas con espacios - como?
Publicado por: Queta en 17 Mayo 2011, 23:50 pm
¿Pero qué método usarás al final?


Título: Re: Guarda cadenas con espacios - como?
Publicado por: d00ze13 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);


Título: Re: Guarda cadenas con espacios - como?
Publicado por: d00ze13 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.  


Título: Re: Guarda cadenas con espacios - como?
Publicado por: Lx 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.


Título: Re: Guarda cadenas con espacios - como?
Publicado por: d00ze13 en 19 Mayo 2011, 09:02 am
Muchas gracias tio!! eres un maquina ; )