Autor
|
Tema: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C] (Leído 36,370 veces)
|
Sagrini
|
#include <stdio.h> #include <string.h> void getnumbs (char *cadena) { int cont; for (cont=0; cont<strlen (cadena); cont++) if (cadena [cont ] >= '0' && cadena [cont ] <= '9') printf ("%c", cadena [cont ]); } int main () { getnumbs ("ewiuc3dskhd8nkd62ndsnk9"); return 0; }
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$
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
Mensajes: 828
BACK!
|
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
|
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
|
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
@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
|
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
Mensajes: 1.639
|
¡Absurda! ¿Porqué?! 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: int extraernum(const char *s) { int n = 0; while (*s){ n = 10 * n + *s - '0'; s++; } return n; }
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
Mensajes: 66
|
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: int extraernum(const char *s) { int n = 0; while (*s){ n = 10 * n + *s - '0'; s++; } return n; }
Un saludo Gracias
|
|
« Última modificación: 6 Enero 2012, 16:17 pm por GarbageCollector »
|
En línea
|
|
|
|
Uknow
Desconectado
Mensajes: 24
|
Aqui va otra forma diferente, sin duda no es practica, ni rapida, ni versatil, pero hey! funciona. xD //typedef int (* mprintf) ( const char * format, ... ); //mprintf myprintf = (mprintf)0x77c4186a; //myprintf("%c", cad[x]); unsigned short mstrlen(char *cad) { char *pcad = cad; while(*pcad++); return pcad - cad; } void extraer(char *cad) { unsigned short x = 0; while(x++ <= mstrlen(cad)) if(cad[x] <= 57 && cad[x] >= 48 ) ((int (*)( const char * format, ... ) )0x77c4186a)("%c", cad[x]); } int main() { 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."; extraer(cad); return 0; }
|
|
|
En línea
|
|
|
|
Sagrini
|
@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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
App para buscar info y cadenas de numeros en MYSQL
Programación Visual Basic
|
A2Corp
|
2
|
3,896
|
14 Mayo 2008, 18:47 pm
por odeONeSs
|
|
|
[RETO] Funcion iFactorize() - Factorizacion de numeros enteros
« 1 2 »
Programación Visual Basic
|
Karcrack
|
15
|
11,698
|
19 Julio 2010, 17:19 pm
por FFernandez
|
|
|
[RETO] + Funcion Extraer Numeros de Cadenas!
« 1 2 ... 5 6 »
Programación Visual Basic
|
x64core
|
55
|
29,240
|
9 Enero 2012, 10:26 am
por Psyke1
|
|
|
¿Como extraer cadenas especificas de un perfil wireless xml?
« 1 2 »
Programación C/C++
|
Romualdo23
|
16
|
9,316
|
25 Abril 2015, 22:20 pm
por ivancea96
|
|
|
[[RETO]] Funcion para ordenar, extraer e insertar en una pila
« 1 2 »
Programación C/C++
|
BlackDhampir
|
10
|
9,970
|
28 Octubre 2021, 16:22 pm
por Eternal Idol
|
|