[RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C]

Iniciado por x64core, 4 Enero 2012, 22:41 PM

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

El_Java

#10
Aquí os dejo mi versión, tiene complejidad O(str.size()):

EDITO: Pongo el algoritmo como forma de función, thanks EI

Código (cpp) [Seleccionar]
#include <iostream>
#include <cctype>
using namespace std;

string extraer(const string &str){
   string aux;
   for(int a=0; a<(int)str.size(); a++) if(isdigit(str[a])) aux.push_back(str[a]);

   return aux;
}

int main(){
   string str;

   str = "ewiuc3dskhd8nkd62ndsnk9";
   //cin >> str;

   str = extraer(str);
   cout << str << endl;

   return 0;
}


Eternal Idol

La verdad es que los requisitos no estan bien definidos pero me parece que se pidio una FUNCION. ¿Con un codigo solo ya es suficiente, no?
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

alexis33de

El mio soy nuevo en esto de c++, asi que espero respuestas q me ayuden a mejorar  :rolleyes:
Código (cpp) [Seleccionar]
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int extraer(char cad[50])
{
    for(int i=0;i<=strlen(cad);i++)
    {
        if(cad[i]>='0'&&cad[i]<='9')
        {
         cout<<cad[i];
        }

    }
    return 0;
}
int main()
{
    char cadena[50];
    cout << "coloque la cadena" << endl;
    gets(cadena);
    cout<<extraer(cadena);

    return 0;
}

rir3760

El algoritmo (procesar cada carácter de forma secuencial) esta bien. Lo que si hay que cambiar son algunos detalles como los nombres de los encabezados (deberían ser <cstdio> y <cstring>) y evitar el uso de la función "gets". Tampoco utilizas el valor de retorno de la función (en lugar de imprimir cada dígito debes calcular el numero y retornarlo).

Para el caso te conviene leer el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
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

Eternal Idol

alexis33de: empujar el resultado de extraer en cout no tiene ningun sentido, lo unico que logras es escribir un 0 que no es parte del input en pantalla (en mi codigo sirve para imprimir la cadena que retorna mi funcion).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

m0rf

#15
Hay va mi codigo:


#include <stdio.h>
#include <string.h>
#include <ctype.h>

int llistar_numeros(char frase[])
{

int numcars = strlen(frase);
int cont=0;

while(cont<numcars){
                   
                   if (isdigit(frase[cont]))
                   {
                    printf("%c",frase[cont]);
                   }
cont++;
}

}

int main()
{

char paraula[] = "as3k34nk3k3n4nkl2n4n3n2n888888nn8n8nn8nn8n8nkn87k6n78";

llistar_numeros(paraula[]);

}



PD: Como puedo hacer para identar con colores el codigo?
Si todos fuéramos igual de inteligentes no existiría la mediocridad porque no podríamos apreciarla. Aprecias la mediocridad?

Eternal Idol

m0rf: Tenes que poner el lenguaje del codigo en cuestion: code=c (pone editar en tu mensaje ahora y vas a ver el cambio tal y como lo hice).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

m0rf

Vale gracias.

Por cierto para utilizar la libreria time.h para saber el tiempo que gasta en encontrar los numeros, que hago pongo un printf con el tiempo al principio de la aplicación y al final o solo al final?

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

Eternal Idol

Tenes que obtener el valor al comienzo y al final (del programa o de la funcion, no se, el autor del reto hara las pruebas) para poder hacer el calculo de cuanto tardo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

ace332

Cita de: BlackZeroX (Astaroth) en  5 Enero 2012, 07:14 AM
@GarbageCollecter
Tu codigo tiene una declaración que es absurda... mas en espesifico const char *p...

¡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 *.