Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Curioso0078

#1
Hola, como estan? Tengo el siguiente problema. Tengo una funcion que dada dos cadenas, debe de concatenarlas, el problema empieza es que me devuelve cualquier cosa, muchos espacios en blanco.
struct textoenstruct;

typedef textoenstruct *puntero_a_struct;

struct textoenstruct {
  char caracteres[21];
  nat longitud;
};

puntero_a_struct concatenar_texto(puntero_a_struct t1, puntero_a_struct t2) {
puntero_a_struct final = new textoenstruct[strlen(t1 ->caracteres)+strlen(t2 ->caracteres)];
strcat(final->caracteres, t1 ->caracteres);
strcat(final->caracteres, t2 ->caracteres);
/* si es mayor a 20 eliminar todo el resto */
if ((strlen(t1 ->caracteres)+strlen(t2 ->caracteres)) > 20) {

for(int i = 20;i <= strlen(final->caracteres);i++) {
final->caracteres[i] = '\0';

} }

return final;
}

Tengo que hacerla mediante punteros, es un tema que me cuesta mucho(memoria dinamica). Esto es lo que hace la funcion:

Creo "textoenstruct" mediante new, el cual tiene de longitud (strlen(t1 ->caracteres)+strlen(t2 ->caracteres)), ya que los estoy concatenando (Pero tambien concatena el espacio en blanco) lo cual, ahora que lo pienso, contradice el concepto de memoria dinamica
ya que le estoy asignando un tamaño estatico, luego digo que en caso que la longitud del vector sea mayor a 20, coloque todos los caracteres posteriores como "\0" ya que esto seria como que estuvieran borrados cierto?
Entonces tengo un nuevo vector con los primeros 20 elementos del texto concatenado, pero en la practica el resultado es diferente, tiene muchos espacios en blanco

Y con esta linea asi como esta, el programa no compila:
for(int i = 20;i <= strlen(final->caracteres);i++)

Nop entiendo cual es el problema de colocar esto asi
#2
Tengo que crear una funcion que devuelva un texto (Una palabra) leido desde la entrada estandar. Como es una palabra, la funcion lee hasta encontrar un espacio en blanco. Ademas esta la condicion de que la palabra no puede ser mayor a 20.
Tengo que hacerlo mediante punteros y estructuras por eso, lo que hice fue lo siguiente:


struct textoenstruct;

typedef textoenstruct *puntero_a_struct;

struct textoenstruct {
  char caracteres[21];
  nat longitud;
};

puntero_a_struct palabra() {
puntero_a_struct final = new textoenstruct[21];
scanf("%c",final>caracteres);
int i = 0;
while (i != strlen(final->caracteres))
{
if (final->caracteres[i] == "\0")
{
int h = i;
while (h < i)
{
final->caracteres[h] = "\0";
h++;
}
i++;
}
}
return final;
}


El problema es que no esta funcionando, y no se estoy haciendo mal, para mi tiene logica, pues, crea "textoenstruct", y al colocar "final->caracteres" en scanf, se coloca ahi la palabra, si se coloca "hola como estas" con el convierte desde la "c" hasta el final de la segunda palabra en "\0", ya que no se pueden achicar vectores la pense asi. Pero sigue sin funcionar
#3
Tengo un vector que de la forma

char h[4] = "hola";

yo quiero eliminar todo apartir de la segunda letra para dejar solo "ho", algun consejo sobre como encararlo?
Usando solo stdlib.h, cstring, o cstdio
#4
Haciendo una tarea para la facultad, veo que crean un puntero que esta asignado a la direccion en memoria de una estructura


struct fecha {
   int mes;
   int dia;
};

main() {
   fecha *fechaPunt;
   fechaPunt = new fecha;

   fechaPunt -> mes = 10;
   fechaPunt -> dia = 17;
delete fechaPunt; }


El problema es que no entiendo porque hacen esto, de que sirve?. No es mejor poner


main() {

fecha.mes = 10;
fecha.dia = 17;

}


Esto resumiría todas las lineas de codigo del main() anterior en 2. ¿Tiene alguna utilidad el crear un puntero en este ejemplo?
#5
Tengo una duda con respecto a la funcion de un puntero en una parte de código (c++):


typedef info *arraytexto;
struct textos {
arraytexto elementos;
nat taminio;
nat elementos;
};

int main(){
textos contenido;
contenido.tamanio = 8;
contenido.elementos = new info[entrada.tamanio];
info linea = "hola";



Por lo que entiendo, esto define el tipo "info" apuntando a arraytexto, el problema es que no entiendo de que sirve hacer esto. despues pone "info linea = "hola";" y "new info[entrada.tamanio];" no entiendo muy bien porque usa el new ahi, ya que solo esta reservando memoria dinamica