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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como inicializar una matriz char**
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como inicializar una matriz char**  (Leído 2,301 veces)
sebapoli00

Desconectado Desconectado

Mensajes: 20


Ver Perfil
como inicializar una matriz char**
« en: 1 Abril 2019, 22:21 pm »

hola, quisiera saber como inicializar una matriz char ** cuando me pasan por parametro filas y columnas, gracias.


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: como inicializar una matriz char**
« Respuesta #1 en: 1 Abril 2019, 22:27 pm »

Imagino que te refieres a usando memoria dinámica. En ese caso el proceso es el siguiente, tanto en una función con parámetros como en el <main>:
Código
  1. int **matriz;
  2. int filas = 4, columnas = 4;
  3.  
  4. matriz = new int* [filas]; // reservamos memoria en el puntero para tantos punteros como filas tenga la matriz
  5. for(int i = 0; i < filas; ++i) // por cada fila
  6.    matriz[i] = new int [columnas]; // reservamos espacio para x columnas
  7.  
También se podría hacer al revés y crear punteros para cada columna y luego reservar filas pero se suele hacer así.
No olvides luego liberar toda la memoria dinámica que hemos reservado... Suerte :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
sebapoli00

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: como inicializar una matriz char**
« Respuesta #2 en: 2 Abril 2019, 00:36 am »

Hola, he probado como tu dices, asi:

Código
  1. char **matriz;
  2. int filas = 3;
  3. int columnas = 5;
  4. matriz = new char*[filas];
  5. for (int i = 0; i < filas; i++)
  6. matriz[i] = new char[columnas];
  7.  

Pero me da errores, "Error al leer los caracteres de la cadena"
"No se puede leer la memoria"
¿que será?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: como inicializar una matriz char**
« Respuesta #3 en: 2 Abril 2019, 00:45 am »

Coloca el resto de tú código para que pueda ver el problema
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
sebapoli00

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: como inicializar una matriz char**
« Respuesta #4 en: 2 Abril 2019, 00:58 am »

Lo que busco es retornar un nuevo char ** ordenado segun la tabla ascii, recibo el vector y su largo

Entrada: (["ola","terremoto","area"], 3)
Retorno: (["area","ola","terremoto"])

Código
  1. char **ordenarVectorStrings(char **vectorStr, int largoVectorStr) {
  2. if(largoVectorStr > 0) {
  3. char **matriz;
  4. int filas = 1;
  5. matriz = new char*[filas];
  6. matriz[0] = new char[largoVectorStr]; // reservamos espacio para x columnas
  7. char * aux = *vectorStr;
  8. for (int i = 0; i < largoVectorStr; i++) {
  9. for (int j = 0; j < largoVectorStr; j++) {
  10. if (j + 1 < largoVectorStr) {
  11. if (comparar(vectorStr[j], vectorStr[j + 1])) {
  12. aux = vectorStr[j];
  13. }
  14. else {
  15. aux = vectorStr[j + 1];
  16. }
  17. }
  18. else {
  19. aux = vectorStr[j];
  20. }
  21. }
  22. matriz[0][i] = *aux;
  23. }
  24. return matriz;
  25. }
  26. else {
  27. return NULL;
  28. }
  29.  
  30. }
  31.  
  32. int comparar(char* a, char* b) {
  33. while (*a != '\0' && *b != '\0') {
  34. if (*a != *b) {
  35. return *a - *b;
  36. }
  37. a++;
  38. b++;
  39. }
  40. return *a - *b;
  41. }
  42.  
  43.  
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: como inicializar una matriz char**
« Respuesta #5 en: 3 Abril 2019, 17:44 pm »

Mientras que la función de <comparar()> es correcta, la de <ordenarVectorStrings()> no lo es. Tienes un lío bien montado ahí cuando la función es mucho más sencilla.
Además no necesitas devolver nada, puedes reordenar el array que pasas como parámetro simplemente.

Antes de nada si tienes errores hay que asegurarse de que el error no está en la entrada de datos. Por lo que te dejo aquí una forma de pedir las palabras y un algoritmo para ordenarlas. No te lo voy a dar hecho en C++ para no dártelo todo hecho, pero te servirá para guiarte:
Código:
// almacenar palabras
reservarFilas(palabras, cantidad_palabras)
para i := 0 hasta cantidad_palabras-1
    nueva_palabra := pedirPalabra()
    longitud := longitud(nueva_palabra)
    reservarColumnas(palabras[i], longitud)
    palabras[i] := nueva_palabra
fin para

// ordenar palabras
para i := 0 hasta cantidad_palabras-2
    para j := i+1 hasta cantidad_palabras-1
        si compararPalabras(palabras[i], palabras[j] > 0)
            intercambiar(palabras[i], palabras[j])
        fin si
    fin para
fin para

Espero que te sirva y si tienes alguna duda más o problema no olvides dejar tú código para poder corregir esos errores. :-X :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inicializar matriz? « 1 2 »
Java
monsefoster 10 8,734 Último mensaje 18 Noviembre 2009, 06:06 am
por juancho77
duda doble puntero char a matriz de char
Programación C/C++
neo_from_cs_matrix 3 6,315 Último mensaje 5 Septiembre 2011, 03:53 am
por rir3760
Lectura de matríz de char como char** o DWORD*
Programación C/C++
david_BS 3 3,611 Último mensaje 20 Febrero 2012, 20:49 pm
por Eternal Idol
Pasar matriz char a una función como referencia
Programación C/C++
KISKE 2 7,866 Último mensaje 18 Junio 2013, 13:07 pm
por KISKE
Inicializar una matriz
Programación C/C++
JonaLamper 2 1,821 Último mensaje 7 Marzo 2016, 07:04 am
por furciorifa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines