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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]  (Leído 36,675 veces)
Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #20 en: 5 Enero 2012, 18:29 pm »

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void getnumbs (char *cadena)
  5. { int cont;
  6. for (cont=0; cont<strlen (cadena); cont++)
  7. if (cadena [cont] >= '0' && cadena [cont] <= '9') printf ("%c", cadena [cont]);
  8. }
  9.  
  10. int main ()
  11. { getnumbs ("ewiuc3dskhd8nkd62ndsnk9"); return 0; }
  12.  
Código:
sagrini@pc10-1:~/Escritorio$ nano code.c
sagrini@pc10-1:~/Escritorio$ gcc -o code code.c
sagrini@pc10-1:~/Escritorio$ ./code
38629juanra@pc10-1:~/Escritorio$
Código:
38629
Process returned 0 (0x0)     execution time : 0.018 s
Press ENTER to continue.



Al que dude que mi código no sea válido, que lea las normas jajaja
Un saludo! Sagrini


« Última modificación: 5 Enero 2012, 18:34 pm por Sagrini » En línea

m0rf


Desconectado Desconectado

Mensajes: 828


BACK!


Ver Perfil
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #21 en: 5 Enero 2012, 19:47 pm »

Citar
38629
Process returned 0 (0x0)     execution time : 0.018 s
Press ENTER to continue.

Hola Sagrini, podrias poner con que codigo haces las pruebas de tiempo de ejecución? Es para hacerme una idea.

Por cierto es más rápido un while o un for? Segun lo que tengo entendido es más rápido un for me parece. Que opinión tienen?

Saludos.


En línea

Si todos fuéramos igual de inteligentes no existiría la mediocridad porque no podríamos apreciarla. Aprecias la mediocridad?
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #22 en: 5 Enero 2012, 20:45 pm »

Al que dude que mi código no sea válido, que lea las normas jajaja
Si somos flexibles con la descripción del reto (RETO: Funcion Extraer Valores Numericos de Cadenas) podemos entender que se imprima y ya está, pero en su sentido más extricto dice que extraigas, pero no te dice nada de mostrarlo en la salida por consola (porque podria ser en un archivo perfectamente), por lo que lo más correcto es devolver un dato del mismo tipo que procesas (char *, string, etc) pero solo con valores númericos.

@m0rf: en los demás IDE no sé, pero en Codeblocks cuando terminas de ejecutar la aplicación te sale ese mensaje.

PD: tu código va a ser de los/el más eficiente, está en C y no usas estructuras stl como el string, enhorabuena. campeón. Si quieres más eficiencia, guarda strlen(cadena) en una variable, así no tienes que calcularlo 2000 veces
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #23 en: 5 Enero 2012, 20:59 pm »

@Eternal Idol:
Si, fue error mio no escribir todos los detalles :/
porque si modificara tendrian que funcionar hasta con cadenas de tipo: "ndwhe28bdm9n82g1b@n9  #.:Lnhq"
aunque la mayoria si funcionasen perfectamente ( si no es todas )




@m0rf:
yo lo voy a hacer de esta forma:
Código:
clock_t ini, end;
  double sec;

  ini = clock();
  // call function
  end = clock();

  sec = (double)(end - ini) / CLOCKS_PER_SEC;

claro que en un bucle de 1000 ciclos...
si alguien tiene una mejor forma de hacerlo que diga por fa :)




@m0rf:
segun lo que sé un for...




@Sagrini:

en la funcion tendria que hacer la tarea de obtener los caracteres devolviendolos en una variable como parametro o como retorno no debe
debe imprimirlos porque al fin y al cabo no se imprimiran , lo hacemos para demostracion lo que nos interesa es la velocidad de la funcion...



@El_Java:

Y las Librerías de tu code?



EDIT:

Gente e agregado la cadena que sera la que determinara la velocidad de nuestras funciones, por favor tomenla en cuenta ( Pido disculpas por no escribirla desde principio aunque creo visto que todas nuestras funciones cumplen con las espectativas de tal cadena :) )

« Última modificación: 5 Enero 2012, 22:44 pm por RHL - 该0在 » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #24 en: 5 Enero 2012, 22:32 pm »

@RHL

Pon en rojo lo que tienes en color amarillo, estoy ciego, pero no tanto como para no ver lo que escribes, seria mejor que hicieras citas por medio de su nick (en este estilo) que citar su publicación, ya que si estoy ciego para ver el amarillo pero da un poco de flojera leerte así!¡.

Otras cosas respecto al Reto...

Segun entiendo lo que se pretende es utilizar un algoritmo de dificultad O(X) [lineal] ¿no?... si es asi usa mi primer codigo, y si esta abierto a criterio e ingenio pues toma en consideración el segundo solo como prueba de test (Tiene un errores de retornos, retorna TODOs los numeros pero de manera desordenada... ademas es una de las mas lentas)!¡...

Dulces Lunas!¡.
« Última modificación: 5 Enero 2012, 22:49 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #25 en: 5 Enero 2012, 22:42 pm »

El caso que yo uso una plantilla para programar con miles de macros y librerias, y se me ha olvidado añadir las que necesita, ahora mismo lo hago.

Saludos!
« Última modificación: 5 Enero 2012, 22:47 pm por El_Java » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #26 en: 6 Enero 2012, 00:23 am »

¡Absurda! ¿Porqué?! :xD

const char *p;

indica que los caracteres apuntados por p no serán modificados como es el caso de la función. La función printf también hace uso de const char *.

BlackZeroX (Astaroth) se refiere (supongo) a que no es necesario declarar la variable ya que en su lugar puedes utilizar el parámetro "s". De hacerlo así la función se reduce a:
Código
  1. int extraernum(const char *s)
  2. {
  3.   int n = 0;
  4.  
  5.   while (*s){
  6.      if (isdigit(*s))
  7.         n = 10 * n + *s - '0';
  8.  
  9.      s++;
  10.   }
  11.  
  12.   return n;
  13. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #27 en: 6 Enero 2012, 05:02 am »

BlackZeroX (Astaroth) se refiere (supongo) a que no es necesario declarar la variable ya que en su lugar puedes utilizar el parámetro "s". De hacerlo así la función se reduce a:
Código
  1. int extraernum(const char *s)
  2. {
  3.   int n = 0;
  4.  
  5.   while (*s){
  6.      if (isdigit(*s))
  7.         n = 10 * n + *s - '0';
  8.  
  9.      s++;
  10.   }
  11.  
  12.   return n;
  13. }

Un saludo
Gracias
« Última modificación: 6 Enero 2012, 16:17 pm por GarbageCollector » En línea

Uknow

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #28 en: 6 Enero 2012, 06:02 am »

Aqui va otra forma diferente, sin duda no es practica, ni rapida, ni versatil, pero hey! funciona. xD
Código
  1. //typedef int (* mprintf) ( const char * format, ... );
  2. //mprintf myprintf = (mprintf)0x77c4186a;
  3. //myprintf("%c", cad[x]);
  4.  
  5. unsigned short mstrlen(char *cad)
  6. {
  7.  char *pcad = cad;
  8.  while(*pcad++);
  9.  return pcad - cad;
  10. }
  11.  
  12. void extraer(char *cad)
  13. {
  14. unsigned short x = 0;
  15. while(x++ <= mstrlen(cad))
  16. if(cad[x] <=  57 && cad[x] >= 48 )
  17. ((int (*)( const char * format, ... ) )0x77c4186a)("%c", cad[x]);
  18.  
  19. }
  20.  
  21. int main()
  22. {
  23. char cad[] = "sdh!w2 28 :-)  9ndk#1@b______dy0--hveybd@  # qism083  s'kl...: su2b7h ++bjsnbvxj77ygv1hiiiioms90nms sjbah b#!1!  --R-E-D--0+-w++ONE***WWW.";
  24. extraer(cad);
  25. return 0;
  26. }
  27.  
En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]
« Respuesta #29 en: 6 Enero 2012, 23:23 pm »

@MORF:
Lo he hecho con Codeblocks, que me muestra la salida de tiempo. No sé exactamente cómo calcula los tiempos (supongo que de una forma parecida a RHL, pero ni idea xD), pero ahí está. Luego, la mecánica del while () no es muy diferente de la del for (), pero depende del uso que se le vaya a dar. Generalmente, while () es más simple, pero en este caso for () es más adecuado.
Por cierto, tu código es MUY parecido al mío, y tu mensaje ha sido modificado varias veces. A ver, no seamos... ¬¬

@EL_JAVA:
Si somos flexibles con la descripción del reto (RETO: Funcion Extraer Valores Numericos de Cadenas) podemos entender que se imprima y ya está, pero en su sentido más extricto dice que extraigas, pero no te dice nada de mostrarlo en la salida por consola (porque podria ser en un archivo perfectamente), por lo que lo más correcto es devolver un dato del mismo tipo que procesas (char *, string, etc) pero solo con valores númericos.
Mi código (a mi parecer) es completamente válido. Yo me atengo a las reglas, si las reglas son tan flexibles...
En línea

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

Ir a:  

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