Autor
|
Tema: Ayuda asignacion de memoria dinámica palabras en c (Leído 13,728 veces)
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
Ya que hablas de hacerlo en un solo puntero y sin saber la cantidad de palabras, yo lo estoy intentando con c++ y no me sale Yo crei que ya entendia el tema xD, pero me toco usar un poco de variables auxiliares, y a la final no me muestra nada... Como lo harias tu??... Saludos...
|
|
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja
|
|
|
nicolasblues86
Desconectado
Mensajes: 38
|
y una forma es como te mostré recién usando fgets y utilizando un variable auxiliar... de ultima si tenes problemas con el nuevo codigo que estas haciendo postealo y nos fijamos porque no imprime nada Saludos Coridiales
|
|
|
En línea
|
Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
|
|
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
Estoy con C++, no con C... Y aca ta el codigo... El problema es que no sale del bucle, de resto creo que funciona, pero sobrecargado de codigo : char *cad,aux[20]="",*caux; int x=0; while (aux != "bye"){ x=x+strlen(aux)+1; aux[strlen(aux)+1]=' '; caux=cad; cad=new char [x]; cad=caux; int z=0; for (int i=x-strlen(aux)-1;i<x;i++){ cad[i]=aux[z]; z++; } cin>>aux; } cout<< cad <<endl; delete[] caux; delete[] cad;
Bueno espero alguien me pueda ayudar... Y pes que a quien no le moleste expongan un mejor algoritmo... Saludos...
|
|
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
no entiendo para que haces que 'vect' sea un puntero de puntero si lo que queres hacer es reserva la cantidad justa de memoria para la cantidad de palabras ingresadas, se puede hacer que vect sea tan solo un puntero a char : Es lo logico, un array bidimensional es un doble puntero. Mostranos en tu caso como leerias las palabras y accederias a ellas posteriormente ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
newfag
Desconectado
Mensajes: 7
|
@nicolasblues86: tienes razón con lo de calloc, el orden está mal puesto, pero si no supiera de antemano las palabras que voy a meter se podría usar la función realloc para que fuera modificando el tamaño de vect. EDIT: tal que asi vect=(char **)calloc(1,sizeof(char*)); do { printf("palabra: "); __fpurge(stdin); scanf("%s" ,aux); if(strcmp(aux,"fin") { vect[i]=(char*)malloc(sizeof(char)*(strlen(aux)+1)); strcpy(vect[i],aux); n++; i++; vect=(char**)realloc(vect,sizeof(char*)*(n+1)); } }while(strcmp(aux,"fin"));
|
|
« Última modificación: 19 Mayo 2010, 12:52 pm por newfag »
|
En línea
|
|
|
|
nicolasblues86
Desconectado
Mensajes: 38
|
no entiendo para que haces que 'vect' sea un puntero de puntero si lo que queres hacer es reserva la cantidad justa de memoria para la cantidad de palabras ingresadas, se puede hacer que vect sea tan solo un puntero a char : Es lo logico, un array bidimensional es un doble puntero. Mostranos en tu caso como leerias las palabras y accederias a ellas posteriormente ... sigo sin entender, ya se que un array bidimensional es un doble puntero, lo que no entiendo es para que sirve en este ejercicio en particular es complicarse la vida, si con un solo array dinámico se puede hacer tranquilamente el problema no exige mas que eso, salvo que yo lo alla entendido mal pero hasta donde se es guardar palabras o mejor dicho una cadena en una array cuyo tamaño definimos en tiempo de ejecución, por eso digo que seria mas facil usar un array de una dimencion y extenderlo tanto como sea necesario de ultima lo que se puede hacer por cada linea que se escribe una fila diferente ahí si hace falta recurrir a la bidimensionalidad : #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 void entrada (char* cd[]) { char aux[120]; int j, tam; printf ("escribe %d linea de texto \n", N ); for (j = 0; j < N; j++) { tam = ((strlen(aux ) +1) * sizeof(char) ); } } int main(int argc, char** argv) { char * cad[N]; entrada (cad); return 0; }
|
|
« Última modificación: 19 Mayo 2010, 18:22 pm por nicolasblues86 »
|
En línea
|
Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
se puede hacer que vect sea tan solo un puntero a char : Un puntero a char es lo que el tenia originalmente: char *vect; Vos ahora diste este ejemplo que es otra cosa: char * cad[N]; sigo sin entender, ya se que un array bidimensional es un doble puntero, lo que no entiendo es para que sirve en este ejercicio en particular es complicarse la vida, si con un solo array dinámico se puede hacer tranquilamente el problema no exige mas que eso, salvo que yo lo alla entendido mal En el ejemplo que das usas un array bidimensional de N punteros a caracter totalmente estatico, la solucion de newfag permite reservar la cantidad de punteros que quiera el usuario. http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap8/cap810.htm
|
|
« Última modificación: 19 Mayo 2010, 18:48 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
nicolasblues86
Desconectado
Mensajes: 38
|
obvio que estoy usando un array bidimensional, solo di ejemplo de como se podria llegar hacer usando ese método, sigo pensando que la manera mas sencilla es con un array unimecional dinámico : #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char** argv) { char* pt; int tam; char b[120]; tam = ((strlen (b ) + 1 ) * sizeof(char) ) ; /* Apartir de aca se treta a pt como si fuese un array normal */ return 0; }
OJO!!! yo no digo que esta sea la manera mas optima de hacerlo, solo digo que es la mas simple obviamente estamos limitados por 120 caracteres y tenemos reservado ese espacio estatico, se puede profundizar mucho más pero la pregunta inicial iba a esto Saludos Cordiles
|
|
« Última modificación: 19 Mayo 2010, 19:32 pm por nicolasblues86 »
|
En línea
|
Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
obvio que estoy usando un array bidimensional, solo di ejemplo de como se podria llegar hacer usando ese método No entiendo muy bien para que ... eso ya lo hizo newfag ... yo te habia pedido que dieras el ejemplo de lo que vos aconsejabas hacer. sigo pensando que la manera mas sencilla es con un array unimecional dinámico :
/* Apartir de aca se treta a pt como si fuese un array normal */ Esa parte es la que me gustaria ver, como lees digamos 300 palabras (o lineas que es en realidad lo que se planteaba en el codigo desde el principio, con un bucle para ello) y despues podes acceder a ellas. Ese codigo por lo pronto lee una sola palabra linea. OJO!!! yo no digo que esta sea la manera mas optima de hacerlo, solo digo que es la mas simple obviamente estamos limitados por 120 caracteres y tenemos reservado ese espacio estatico, se puede profundizar mucho más pero la pregunta inicial iba a esto Yo no lo entendi esa manera y mucho menos despues de leer el codigo donde no se trataba de una cadena de X tamaño sino X numero de cadenas ...
|
|
« Última modificación: 19 Mayo 2010, 19:46 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
nicolasblues86
Desconectado
Mensajes: 38
|
Esa parte es la que me gustaria ver, como lees digamos 300 palabras y despues podes acceder a ellas. Ese codigo por lo pronto lee una sola palabra. Heee?¿?¿?¿?¿? que lee una sola palabra???... no capo! lee una cadena que es muy diferente en ella puede aver una palabra de 120 caracteres (la cual no existe) como tambien puede haber 50 palabras o 20 o una sola por eso uso fgets !!! a ver vamos por por partes aca ta el codigo: #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char** argv) { char* pt; int tam; char b[120]; tam = ((strlen (b ) + 1 ) * sizeof(char) ) ; /* Apartir de aca se treta a pt como si fuese un array normal */ return 0; }
digamos que nosotros ingresamos "hola!! a todos com andan?? espero que bien.. chau" el codigo reserva memoria para alamacenar esa cantidad de caracteres en pt ahora si nosotros queremos ingresar esos caracteres en pt podriamos hacer por ejemplo: puts (pt ); //muestra en contenido de pt
EI: juntando mensajes.buenas, tengo un problemilla, quiero hacer un programa que acepte un numero indeterminado de palabras y las imprima por pantalla(esto último solo para ver si funciona), había pensado algo así pero no va, una ayudita por favor decime porfavor en que parte dice lo de numero indeterminado de lineas yo no lo veo la propuesta inicial era esta que despues se haya deformado es otra cosa Saludos!
|
|
« Última modificación: 19 Mayo 2010, 20:00 pm por Eternal Idol »
|
En línea
|
Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Asignacion Dinamica Memoria
Programación C/C++
|
charmedever
|
5
|
3,728
|
21 Octubre 2011, 05:25 am
por charmedever
|
|
|
Ayuda! Por favor. Tengo problema con memoria dinámica en c++ y función getline
Programación C/C++
|
DeathStar92
|
0
|
2,268
|
25 Noviembre 2012, 19:56 pm
por DeathStar92
|
|
|
Problema con asignación de memoria en puntero de caracteres.
Programación C/C++
|
1t4h1s4
|
9
|
5,234
|
13 Febrero 2013, 02:58 am
por 1t4h1s4
|
|
|
asignacion dinamica de memoria
Programación C/C++
|
d91
|
2
|
2,462
|
1 Junio 2014, 05:09 am
por Drewermerc
|
|
|
asignación dinámica de memoria y strcpy
Programación C/C++
|
m@o_614
|
3
|
2,901
|
5 Junio 2014, 22:42 pm
por leosansan
|
|