Emular una funcion de una cadena(Resuelto)

Iniciado por Dark Invader, 4 Julio 2011, 19:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Dark Invader

¿Te refieres a...

void cortarcadena(char *frase,char *caracter)
{
   char *p = frase;
   char *q = caracter;
char c_ori[30]="";
   char  *r = c_ori;
   char c_temp;
   
 
   while(*p)
       *q == *p ? c_temp = *p++ : (*r++ = *p++);

   puts(c_ori);
   getchar();
}


He unido la cadena al puntero r  :silbar:

leogtz

#11
Me refería a esto:

#include <stdio.h>

void cortarcadena(char *frase,char caracter)
{
   char *p = frase, c_ori[30] = "", *r = c_ori;
   while(*p)
       caracter == *p ? *p = *p++ : (*r++ = *p++);
   puts(c_ori);
}

int main(void)
{
   char frase[81], c;
   printf("Frase : ");
   fgets(frase, 81, stdin);
   printf("Caracter : ");
   scanf("%c", &c);
   cortarcadena(frase, c);

   return 0;
}


Ok, una última:

void cortarcadena(char *frase,char caracter)
{
    char *p = frase, c_ori[30] = "", *r = c_ori;
    for(; *p; caracter == *p ? *p = *p++ : (*r++ = *p++));
    puts(c_ori);
}


:D
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dark Invader

Nunca habia visto usar el for asi:

  for(; *p; caracter == *p ? *p = *p++ : (*r++ = *p++));


¿Se puede utilizar la ultima fila del for con todo eso? :-\

Es que nunca lo habia utilizado asi...

Gracias por las formas,estoy tomando nota de todas  ::)

Salu2

leogtz

Cita de: Dark Invader en  5 Julio 2011, 00:24 AM
Nunca habia visto usar el for asi:

 for(; *p; caracter == *p ? *p = *p++ : (*r++ = *p++));


¿Se puede utilizar la ultima fila del for con todo eso? :-\

Sí, queda medio críptico el código, pero más corto, pero pierde legibilidad :)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dark Invader

Una ultima cosa Leo,perdon por alargar el tema mas de la cuenta,no seria...:

for(; *p; caracter == *p ? c_temp = *p++ : (*r++ = *p++));

Es que *p=*p++ no me suena bien,a lo mejor he sido yo el que no lo he entendido... :xD

leogtz

Es que fíjate que en tu código c_temp no lo utilizas para nada (no tiene utilidad), así que con
*p = *p++
simplemente avanzamos, al igual que lo hace *p++.

for(; *p; caracter == *p ? *p = *p++ /* Simplemente avanzados*/ : (*r++ = *p++));

como no podemos poner:
for(; *p; caracter == *p ? *p++ /* Simplemente avanzados, no asignación ni nada */ : (*r++ = *p++));
porque daría error, he utilizado:
for(; *p; caracter == *p ? *p = *p++ /* Simplemente avanzados, no asignación ni nada */ : (*r++ = *p++));

Para que lo acepte el compilador.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dark Invader

Es verdad,tienes toda la razon,la cadena c_temp la utilizaba como temporal,para pasar los argumentos que no servian y desecharlos de la cadena,pero asi mucho mejor,muchas gracias Leo,he aprendido muchas cosas.  ::)

Gracias de nuevo,mirare de nuevo todo el tema para asimilarlo bien,ya que ha habido muchos cambios.  :xD

Salu2