Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: negux en 29 Junio 2010, 01:49 am



Título: Ayuda con matrices de cadenas
Publicado por: negux en 29 Junio 2010, 01:49 am
Bueno como dice el titulo quisiera saber como le puedo hacer , con una matriz almacenar nombres y numeros , algo asi:


                           nombre1  7   8   9
                           nombre2  5   2   8
                           nombre3  7   8   10

donde nombre1 seria una posicion en memoria de la matriz, al igual que cada numero
no se como almacenar los datos en la matriz.. espero me puedan ayudar


Título: Re: Ayuda con matrices de cadenas
Publicado por: cbug en 29 Junio 2010, 01:53 am
Creo que deberías utilizar algo como lo siguiente:

Código
  1. typedef char *cadena;
  2.  
  3. cadena **matriz;


Título: Re: Ayuda con matrices de cadenas
Publicado por: .:BlackCoder:. en 29 Junio 2010, 01:55 am
Si quieres restringirlo a enteros debes hacer vectoresde estructuras... pero si quieres trabajar los numeros como caracteres...

usa char matriz[m][n];

es decir arrays de 2 dimensiones...

Saludos...

EDITO:
Esto esta errado... de cierta forma...


Título: Re: Ayuda con matrices de cadenas
Publicado por: cbug en 29 Junio 2010, 01:57 am
Código:
char matriz[m][n];

Aquí nunca podrás almacenar una cadena como elemento de la "matriz".


Título: Re: Ayuda con matrices de cadenas
Publicado por: .:BlackCoder:. en 29 Junio 2010, 02:02 am
iba a ser del tipo string, es q trabajo con c++ pero si es en C pes debe ser de 3 dimensiones...

 :P

Saludos...


Título: Re: Ayuda con matrices de cadenas
Publicado por: negux en 29 Junio 2010, 02:09 am
podrias explicarme un poco mas de eso de 3 dimensiones, le entiendo cuando es doble apuntador o de 2 dimensiones, pero de 3 no logro visualizarlo, y como meter datos ahi ;D
siento que seria algo asi como :
char *matriz[][];
 :huh:


Título: Re: Ayuda con matrices de cadenas
Publicado por: cbug en 29 Junio 2010, 02:10 am
Bueno si fuese en C++, tendriamos en realidad:

Código:
[b]string[/b] matriz[][]

podrias explicarme un poco mas de eso de 3 dimensiones, le entiendo cuando es doble apuntador o de 2 dimensiones, pero de 3 no logro visualizarlo, y como meter datos ahi ;D
siento que seria algo asi como :
char *matriz[][];
 :huh:

Con esto último estaría bien.

Fijate que: **matriz == matriz[][] EN CIERTO MODO. Ahora bien observa: ***matriz == *matriz[][]


Título: Re: Ayuda con matrices de cadenas
Publicado por: .:BlackCoder:. en 29 Junio 2010, 02:14 am
Imagina que una dimension es para las letras (cada palabra) la otra dimension para las palabras (como una frase, o una linea, es decir un vector de palabras) y la otra para que sean varias frases(como un vector de frases o registros)... Mas o menos asi lo puedes ver...

Saludos...


Título: Re: Ayuda con matrices de cadenas
Publicado por: negux en 29 Junio 2010, 02:23 am
Bueno, un poco mas claro, ahora hice este pequeño codigo, amm si me almacena nombres y numeros, pero no se por que cuando trato de meter los datos en la matriz de forma horizontal digamos, no lo almacena, si no que lo tengo que hacer de forma vertical,  ;D espero me hayan entendido, si no aqui esta mi codigo, y ahi espero que sea mas claro:
Código:
#include<stdio.h>
#include<stdlib.h>

main()
{

char *mat[3][3];
int i,m,n=5,j;

    /*printf("Cuantos nombre quieres\n");}

    scanf("%d",&num);*/
   
     

    for(i=0;i<3;i++)
    {
                    for(j=0;j<3;j++)
                    {
                                    mat[j][i]=(char*)malloc(sizeof(char)*n);
                                    fflush(stdin);
                                    scanf("%s",&*mat[j][i]);  /*en esta parte lo guardo de   forma vertical, ya que primero incrementa j luego i, comunmente es primero i luego j
                    }
    }
   
    for(i=0;i<3;i++){
                    for(j=0;j<3;j++){
                    printf("%s",mat[i][j]);
                    }
                    printf("\n");
                    }
    getchar();
 return 0;   
}






Título: Re: Ayuda con matrices de cadenas
Publicado por: nicolas_cof en 29 Junio 2010, 03:09 am
Bueno como dice el titulo quisiera saber como le puedo hacer , con una matriz almacenar nombres y numeros , algo asi:


                           nombre1  7   8   9
                           nombre2  5   2   8
                           nombre3  7   8   10

donde nombre1 seria una posicion en memoria de la matriz, al igual que cada numero
no se como almacenar los datos en la matriz.. espero me puedan ayudar

Lo que podrias hacer es un arreglo de estructuras.

Código:
typedef struct _s
{
    char nombre1[50];
    int numero1
} registro;
typedef registro *matriz;

int main( void )
{
    matriz m;
    m = malloc( 5 * sizeof( registro ) );
    ...
}

Salu10.


Título: Re: Ayuda con matrices de cadenas
Publicado por: cbug en 29 Junio 2010, 03:17 am
Esta es una opción:

Código:
#include<stdio.h>
#include<stdlib.h>

int main()
{
  char *matriz[2][2];
  int i, j;
  for(i = 0; i < 2; i++)
    for(j = 0; j < 2; j++){
      matriz[j][i] = malloc(sizeof(char)*10);
      fgets(matriz[j][i], sizeof(char)*10, stdin);
    }
  for(i = 0; i < 2; i++){
    for(j = 0; j < 2; j++){
      printf("\t %s \t", matriz[i][j]);
    }
    printf("\n");
  }      
  return 0;
}

Ahora bien, lee las chinchetas del foro para saber porque no usar scanf(), como tampoco es bueno utilizar fflush(stdin).


Título: Re: Ayuda con matrices de cadenas
Publicado por: nicolas_cof en 29 Junio 2010, 03:26 am
Esta es una opción:

Código:
#include<stdio.h>
#include<stdlib.h>

int main()
{
  char *matriz[2][2];
  int i, j;
  for(i = 0; i < 2; i++)
    for(j = 0; j < 2; j++){
      matriz[j][i] = malloc(sizeof(char)*10);
      fgets(matriz[j][i], sizeof(char)*10, stdin);
    }
  for(i = 0; i < 2; i++){
    for(j = 0; j < 2; j++){
      printf("\t %s \t", matriz[i][j]);
    }
    printf("\n");
  }      
  return 0;
}

Ahora bien, lee las chinchetas del foro para saber porque no usar scanf(), como tampoco es bueno utilizar fflush(stdin).

cbug, acuerdate de utilizar la funcion free() para no dejar memory leaks...

Salu10.


Título: Re: Ayuda con matrices de cadenas
Publicado por: cbug en 29 Junio 2010, 03:46 am
Citar
cbug, acuerdate de utilizar la funcion free() para no dejar memory leaks...

Muy cierto, gracias por recomendarmelo... hace mucho que no tengo práctica en C, y a veces esos detalles son importantes y muy frecuentes de olvidárselos.


Título: Re: Ayuda con matrices de cadenas
Publicado por: .:BlackCoder:. en 29 Junio 2010, 04:51 am
Al igual que nicolas, y como ya lo menciones, lo mejor seria un arreglo de estructuras... Y pes no creo que el que hizo el post sepa memoria dinamica  :xD

Si tienes tiempo y ganas, pes hazlo con los 2 para que tu decidas que es mejor...

Saludos


Título: Re: Ayuda con matrices de cadenas
Publicado por: negux en 30 Junio 2010, 00:17 am
ps memoria dinamica si se, tal vez no al nivel de ustedes; :P
y si no me queda claro algo, mejor pregunto: xD claro despues de leer.
Gracias por sus respuesta, han sido de bastante ayuda
saludos