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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (SOLUCIONADO)Como creo un array bidimensional de strings¿?no encuentro solucion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (SOLUCIONADO)Como creo un array bidimensional de strings¿?no encuentro solucion  (Leído 2,283 veces)
amrotz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
(SOLUCIONADO)Como creo un array bidimensional de strings¿?no encuentro solucion
« en: 21 Marzo 2013, 04:34 am »

Hola, estoy aprendiendo C++ con algunos tutoriales descargados de internet, despues de leer unas cuantas lecciones me decidi experimentar un poco con lo aprendido y me puse a programar una agenda.

He conseguido crearla y que funcione, pero tengo un dilema, me gustaria no limitarme al numero de datos introducidos por "usuario", para ello estaba pensando en hacer un array en el que el primer indice sea el numero de "usuario" y el segundo indice indique los datos de este.
Una cosa asi.

Usuario[0][0] = Nombre   Usuario[0][1] = telefono ...etc
Usuario[1][0] = Nombre   Usuario[1][1] = telefono ...etc

pero no logro hacerlo, no se como crear un array asi, ya que como se tratan de strings me da error.

Os pongo el codigo del "programa" que me imagino que se me entendera mejor.

Código:
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include <cstdlib>
using namespace std;

 int main(){


/**********DECLARACION VARIABLES***************/
      
      string nombre;
      string telefono;
      string direccion;
      string notas;
      
      vector <string> vnombre;
      vector <string> vtelefono;
      vector <string> vdireccion;
      vector <string> vnotas;
      
      
      string resp;
      string seguir="si";
      
      ifstream agenda_leer;
      ofstream agenda;
      
      string linea;
      vector <string> vline;
      
      int n=0;
      
      
      
      
      
/******************ABRIR ARCHIVO DE REGISTRO PARA COPIAR DATOS**********/

      ifstream vnome_leer("registro.txt");
      while(getline(vnome_leer,linea))
            vline.push_back(linea);
            
      vnome_leer.close();
      
            
            
            
            
      for(int i=0;i<vline.size();i++){
          if (vline[i] == "usuario")
             {
              vnombre.push_back(vline[i+1]);
              vtelefono.push_back(vline[(i+2)]);
              vdireccion.push_back(vline[(i+3)]);
              vnotas.push_back(vline[(i+4)]);
              n++;
              }
          }
          
  /*........EL CODIGO SIGUE, PERO NO CREO QUE HAGA FALTA QUE PONGA TODO*/
                    
 
El problema es que, si por ejemplo, quiero dar opcion a poner 2º telefono, o cualquier otro dato extra, tendria que incluirlo en el codigo, si pudiera hacer un array en el que el primer indice identifique cada "usuario" o persona o como se le quiera llamar, y el segundo indice identifique los datos que contiene ese "usuario", podria hacer el programa bastante mas practico.Pero no consigo hacerlo de ninguna manera.

Aclaro que como estoy aprendiendo , no quiero meterme en cosas que no sean standar, ya que los "atajos" ya tendre tiempo de mirarlos cuando haya aprendido lo suficiente.

Un saludo.


« Última modificación: 21 Marzo 2013, 23:57 pm por amrotz » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Como creo un array bidimensional de strings¿?no encuentro solucion
« Respuesta #1 en: 21 Marzo 2013, 17:10 pm »

Te has planteado hacer una estructura tal que así:

Código
  1. struct datos
  2. {
  3.      string nombre;
  4.      string telefono;
  5.      string direccion;
  6.      string notas;
  7. };

Haces un array de esa estructura y listo.

Si le quieres añadir más tarde datos extra, se los puedes añadir sin modificar el codigo apenas. Podrías incluso poner array de strings dentro...


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
amrotz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Como creo un array bidimensional de strings¿?no encuentro solucion
« Respuesta #2 en: 21 Marzo 2013, 20:21 pm »

La estructura no me vale para mi proposito, ya que lo que intentaba hacer es que el propio usuario fuera quien decidiera cuantos datos tiene cada contacto.
He conseguido hacerlo, tube que poner el tamaño del array pero bueno, me vale bien.

Código:
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<cstring>
#include <cstdlib>
using namespace std;

 int main(){


/**********DECLARACION VARIABLES***************/
     
      string nombre;
      string telefono;
      string direccion;
      string notas;
     
     
     
      string resp;
      string seguir="si";
     
      ifstream agenda_leer;
      ofstream agenda;
     
      string linea;
      vector <string> vline;
     
      int n=0;
     
      int cols=0;
      int fils=0;
     
      string user[100][10];
     
     
     
     
     
/******************ABRIR ARCHIVO DE REGISTRO PARA COPIAR DATOS**********/

      ifstream vnome_leer("registro.txt");
      while(getline(vnome_leer,linea))
            vline.push_back(linea);
           
      vnome_leer.close();
     
     
     
      for(int i=0;i<vline.size();i++){
          if (vline[i] == "usuario")
             {
             int I = (i+1);
             fils=0;
                    do{
                       
                       user[cols][fils]=vline[I];
                       fils++;
                       I++;
                    }while (vline[I]!="####################################");
              cols++;
              }
           }..........

Ahora solo tengo que modificar el codigo para que los datos de cada contacto vallan despues del "nombre del dato" , y haciendole una pregunta al usuario de si quiere añadir mas datos,  en caso de que responda si, tendria que poner el nombre del dato y despues el dato, asi tanto el archivo de registro como el archivo de txt de la agenda, contendrian las variables de esta forma.

N seria el numero identificativo de cada contacto

user[N][0]= el nombre del dato
user[N][1]= lo que contiene ese dato
user[N][2]=el nombre del segundo dato
user[N][3]= lo que contiene el segundo dato

Creo que esto seria correcto, si no es asi les agracederia que me corrigierais.

Un saludo
En línea

amrotz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: (SOLUCIONADO)Como creo un array bidimensional de strings¿?no encuentro solucion
« Respuesta #3 en: 22 Marzo 2013, 00:04 am »

Bueno consegui hacer que funcione como queria, aun se puede pulir un poco para que se vea el codigo mas limpio, y todavía tendria que poner condicionales para que no se pueden incluir las dos cadenas de caracteres que tengo como puntos de inicio y fin del registro, pero funciona, y a menos que el usuario incluya algo tan raro como **************** o ######################## no da error ni resultados inesperados, al menos en lo que he probado yo.
Pongo el codigo aqui completo .

Código:
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<cstring>
#include <cstdlib>
using namespace std;

 int main(){


/**********DECLARACION VARIABLES***************/
     
      string nombre;
      string apellidos;
      string telefono;
      string direccion;
     
      string resp;
      string seguir="si";
      string r;
     
      ifstream agenda_leer;
      ofstream agenda;
     
      string linea;
      vector <string> vline;
     
      int n=0;
      string dato[6];
     
      int cols=0;
      int filas=0;;
     
      int fils[cols];
      string user[100][10];
     
     
     
     
     
/******************ABRIR ARCHIVO DE REGISTRO PARA COPIAR DATOS**********/

      ifstream vnome_leer("registro2.txt");
      while(getline(vnome_leer,linea))
            vline.push_back(linea);
           
      vnome_leer.close();
     
     
     
      for(int i=0;i<vline.size();i++){
          if (vline[i] == "***********************")
             {
             int I = (i+1);
             filas=0;
                    do{
                       
                       user[cols][filas]=vline[I];
                       filas++;
                       I++;
                    }while (vline[I]!="##########################");
              fils[cols]=filas;
              cols++;
              }
           }
           
           
           cout<<endl;
           for(int i=0;i<cols;i++)
               {
                for(int I=0;I<fils[i];I++)
                    {
                     cout<<"user"<<user[i][I]<<endl;
                    }
                 cout<<"################"<<endl;
                }
       
                   
/***************ABRIR AGENDA Y COPIAR DATOS DE REGISTRO***********/

      agenda.open("agenda2.txt");
           
           
            for(int i=0;i<cols;i++)
                {
                 for(int I=0;I<fils[i];I++)
                    {
                     agenda<<"\n"<<user[i][I];
                     I++;
                     agenda<<user[i][I];
                     }
                agenda<<"\n\n##########################\n";
                 
                agenda.close();
                agenda.open("agenda2.txt", ios::app);
           
                }
               
      agenda.close();
     
/***************ABRIR ARCHIVO Y MOSTRARLO POR PANTALLA****************/

      agenda_leer.open("agenda2.txt");
      cout<<"\n\n AGENDA\n\n"<<endl;
     
      while(getline(agenda_leer,linea))
          cout<<linea<<endl;
     
      agenda_leer.close();
       
       
/*****************ESCRITURA ARCHIVO**********************************/
/********************************************************************/
     
   
      while (seguir[0]=='s' or seguir[0]=='S'){
       
     
         cout<<"\n Introduce un nuevo contacto "<<endl;
         
         
         resp="si";
         
         cout<<endl;
         cout<<" Nombre: ";
         cin.sync();
         getline (cin,nombre);
         cout<<endl;
         
         cout<<" Apellidos: ";
         cin.sync();
         getline(cin,apellidos);
         cout<<endl;
         
         cout<<" Telefono: ";
         cin.sync();
         getline(cin,telefono);
         cout<<endl;
         
         cout<<" Direccion: ";
         cin.sync();
         getline(cin,direccion);
         cout<<endl;
         
         n=0;
         r="si";
         
         while(r[0]=='s' or r[0]=='S')
               {
                cout<<" ¿Introducir algun dato mas? ";
                cin.sync();
                getline(cin,r);
                if (r=="s" or r=="s" or r=="si" or r=="Si"
                    or r=="SI" or r=="sI")
                   {
                    cout<<" Introduce el nombre del dato nuevo: ";
                    cin.sync();
                    getline(cin,dato[n]);
                   
                    cout<<endl;
                    cout<<" Introduce el dato nuevo"<<endl;
                    cout<<" "<<dato[n]<<": ";
                    n++;
                    cin.sync();
                    getline(cin,dato[n]);
                    cout<<endl;
                   
                    n++;
                   
                    }
                }
         
         cout<<" Nombre: "<<nombre<<endl
             <<" Apellidos: "<<apellidos<<endl
             <<" Telefono: "<<telefono<<endl
             <<" Direccion: "<<direccion<<endl;
         for (int i=0;i<n;i++)
              {
               cout<<" "<<dato[i]<<": ";
               i++;
               cout<<dato[i]<<endl;
              }
             
         cout<<"\n ¿Los datos son correctos? \n";
         cin.sync();
         getline(cin,resp);
         
         if (resp=="s" or resp=="s" or resp=="si" or resp=="Si"
              or resp=="SI" or resp=="sI"){
             
            filas=0;
            user[cols][filas]="Nombre: ";
            filas++;
            user[cols][filas]=nombre;
            filas++;
            user[cols][filas]="Apellidos: ";
            filas++;
            user[cols][filas]=apellidos;
            filas++;
            user[cols][filas]="Telefono: ";
            filas++;
            user[cols][filas]=telefono;
            filas++;
            user[cols][filas]="Direccion: ";
            filas++;
            user[cols][filas]=direccion;
            filas++;
            for (int i=0;i<n;i++)
                {
                 user[cols][filas]=dato[i]+": ";
                 filas++;
                 i++;
                 user[cols][filas]=dato[i];
                 filas++;
                }
                 
           
            fils[cols]=filas;
           
           
            cols++;
           
            cout<<"user"<<user[0][0]<<endl;
           
            agenda.open("agenda2.txt");
           
           
            for(int i=0;i<cols;i++)
                {
                 for(int I=0;I<fils[i];I++)
                    {
                     agenda<<"\n"<<user[i][I];
                     I++;
                     agenda<<user[i][I];
                     }
                agenda<<"\n\n##########################\n";
                 
                agenda.close();
                agenda.open("agenda2.txt", ios::app);
           
                }
               
             agenda.close();
     
           
            }
           
               
           
         
         agenda_leer.open("agenda2.txt");
         cout<<"\n\n AGENDA\n\n"<<endl;
         
         while(getline(agenda_leer,linea))
                cout<<linea<<endl;
         
         agenda_leer.close();
         
         
         
         cout<<"\n ¿Introducir algun otro contacto? \n";
         cin.sync();
         getline(cin,seguir);
         
         }
     
   
     
     
   
   
   
       
/*******************FIN ESCRITURA ARCHIVO******************************/
/**********************************************************************/
       
       
/**************Guardamos los valores del vector vnome************/
/********************en un archivo de texto***************************/
     
      ofstream vnome("registro2.txt");
     
       
        for(int i=0;i<cols;i++)
               {
                vnome<<"***********************\n";
                for(int I=0;I<fils[i];I++)
                    {
                     vnome<<user[i][I]<<endl;
                    }
                vnome<<"##########################\n";
                }
       
      vnome.close();
     
     
 //Ponemos un comando para que haya que pulsar ENTER para salir
 cout<<"\n Presione ENTER para salir\n";         
 cin.get();
 }
 
 
 
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(Ayuda) Array de strings.
Programación C/C++
S++ 4 2,821 Último mensaje 11 Junio 2015, 03:59 am
por rir3760
[Solucionado] Alguna manera de resetear un array bidimensional
Programación C/C++
JavierScars 9 3,173 Último mensaje 10 Enero 2016, 14:25 pm
por Arkangel_0x7C5
Excepcion con array de strings y lista, ayuda :(
.NET (C#, VB.NET, ASP)
NIGHTBIRD 1 2,469 Último mensaje 21 Febrero 2018, 20:11 pm
por Eleкtro
Problema con array de strings
Programación C/C++
JaimeGc05 3 1,692 Último mensaje 20 Enero 2019, 20:44 pm
por JaimeGc05
[C] Tratando de crear array de strings « 1 2 »
Programación C/C++
huchoko 14 4,109 Último mensaje 9 Junio 2019, 02:30 am
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines