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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Emular una funcion de una cadena(Resuelto)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Emular una funcion de una cadena(Resuelto)  (Leído 6,823 veces)
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #10 en: 4 Julio 2011, 23:36 pm »

¿Te refieres a...

Código
  1. void cortarcadena(char *frase,char *caracter)
  2. {
  3.    char *p = frase;
  4.    char *q = caracter;
  5. char c_ori[30]="";
  6.    char  *r = c_ori;
  7.    char c_temp;
  8.  
  9.  
  10.    while(*p)
  11.        *q == *p ? c_temp = *p++ : (*r++ = *p++);
  12.  
  13.    puts(c_ori);
  14.    getchar();
  15. }

He unido la cadena al puntero r  :silbar:


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #11 en: 4 Julio 2011, 23:44 pm »

Me refería a esto:

Código
  1. #include <stdio.h>
  2.  
  3. void cortarcadena(char *frase,char caracter)
  4. {
  5.    char *p = frase, c_ori[30] = "", *r = c_ori;
  6.    while(*p)
  7.        caracter == *p ? *p = *p++ : (*r++ = *p++);
  8.    puts(c_ori);
  9. }
  10.  
  11. int main(void)
  12. {
  13.    char frase[81], c;
  14.    printf("Frase : ");
  15.    fgets(frase, 81, stdin);
  16.    printf("Caracter : ");
  17.    scanf("%c", &c);
  18.    cortarcadena(frase, c);
  19.  
  20.    return 0;
  21. }
  22.  

Ok, una última:

Código
  1. void cortarcadena(char *frase,char caracter)
  2. {
  3.    char *p = frase, c_ori[30] = "", *r = c_ori;
  4.    for(; *p; caracter == *p ? *p = *p++ : (*r++ = *p++));
  5.    puts(c_ori);
  6. }

:D


« Última modificación: 4 Julio 2011, 23:47 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #12 en: 5 Julio 2011, 00:24 am »

Nunca habia visto usar el for asi:
Código
  1.  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
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #13 en: 5 Julio 2011, 00:28 am »

Nunca habia visto usar el for asi:
Código
  1.  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 :)
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #14 en: 5 Julio 2011, 00:32 am »

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
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #15 en: 5 Julio 2011, 00:54 am »

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

Código
  1. for(; *p; caracter == *p ? *p = *p++ /* Simplemente avanzados*/ : (*r++ = *p++));

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

Para que lo acepte el compilador.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #16 en: 5 Julio 2011, 01:02 am »

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
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines