Autor
|
Tema: (SOLUCIONADO)Como creo un array bidimensional de strings¿?no encuentro solucion (Leído 2,277 veces)
|
amrotz
Desconectado
Mensajes: 3
|
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. #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
Mensajes: 1.211
|
Te has planteado hacer una estructura tal que así: struct datos { string nombre; string telefono; string direccion; string notas; };
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
|
|
|
|
amrotz
Desconectado
Mensajes: 3
|
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. #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
Mensajes: 3
|
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 . #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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
(Ayuda) Array de strings.
Programación C/C++
|
S++
|
4
|
2,816
|
11 Junio 2015, 03:59 am
por rir3760
|
|
|
[Solucionado] Alguna manera de resetear un array bidimensional
Programación C/C++
|
JavierScars
|
9
|
3,159
|
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,460
|
21 Febrero 2018, 20:11 pm
por Eleкtro
|
|
|
Problema con array de strings
Programación C/C++
|
JaimeGc05
|
3
|
1,688
|
20 Enero 2019, 20:44 pm
por JaimeGc05
|
|
|
[C] Tratando de crear array de strings
« 1 2 »
Programación C/C++
|
huchoko
|
14
|
4,092
|
9 Junio 2019, 02:30 am
por RayR
|
|