Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]

#include <iostream>
using namespace std;

struct datos{
    char texto[100];
};
int main(){
struct datos persona;
    cout<<"Introduce texto"<<endl;
    cin>>persona.texto; // Aqui escribiriamos por ejemplo -> esto es una prueba con espacios

    cout<<persona.texto;
}
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 (cpp) [Seleccionar]
#include <cstdio>

int main()
{
char cadena[100];

fgets(cadena, 100, stdin);

printf("%s", cadena);

getchar();

return 0;
}


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 (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
using namespace std;

void escribe(char **name){
        ofstream fs("pw");
        fs<<*name<<endl;
        fs.close();
}
void lee(char **cadena){
        ifstream fe("pw");
        fe.getline(*cadena,30);
        cout<<*cadena<<endl;

        fe.close();
}
int main(void){
        int cont=0;
        char **cad;
        char resp='s';
        cad=new char *[100];
        do{
                cad[cont]=new char[100];
                cout<<"Cadena?: ";
                fgets(cad[cont],100,stdin);
                cont++;

                escribe(cad);
                lee(cad);
        cout<<"Mas [s/n]?: ";
        cin>>resp;
        }while(resp=='s');

        for(int i=0;i<cont;i++)
                delete[]cad[i];
        delete[]cad;
        return 0;
}

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 ...


#include <iostream>
#include <fstream>
using namespace std;

void escribe(char **name, int cont){
       ofstream fs("pw.txt");
       for( int i = 0; i < cont; i++){
           fs<<name[i]<<endl;
       }
       fs.close();
}
void lee( int cont){
 
       char cadena[100];
 
       ifstream fe("pw.txt");
       for( int i = 0; i < cont; i++){
           fe.getline(cadena,100);
           cout<<cadena<<endl;
       }
       fe.close();
}
int main(void){
       int cont=0;
       char **cad;
       char resp='s';
       cad=new char *[100];
       do{
               cad[cont]=new char[100];
               cout<<"Cadena?: ";
               cin.getline(cad[cont],100);
                   
               cont++;
               escribe(cad, cont);
               lee(cont);
               cout<<"Mas [s/n]?: ";
               cin>>resp;
               while(getchar()!='\n'); // esto elimina la basura del buffer que hacía que se salte la lectura de la cadena.
       }while(resp=='s');

       for(int i=0;i<cont;i++)
               delete[]cad[i];
       delete[]cad;
       return 0;
}


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 ; )