Foros del Web » Programación para mayores de 30 ;) » Programación General »

Detectar numeros en C

Estas en el tema de Detectar numeros en C en el foro de Programación General en Foros del Web. Hola maestros, la verdad de las cosas es que no se me ocurre como hacer para detectar solo los numeros de una secuencia de numeros, ...
  #1 (permalink)  
Antiguo 14/10/2007, 10:15
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 6 meses
Puntos: 16
Detectar numeros en C

Hola maestros, la verdad de las cosas es que no se me ocurre como hacer para detectar solo los numeros de una secuencia de numeros, por ejemplo si me pasan:

33 a c d e p 4 s 5 s l l 8

detectar solo

33 4 5 8

En un principio se me habia ocurrido hacerlo con atoi de tal manera que se es un caracter me retorne 0 pero el problema es que el 0 tambien tengo que considerarlo como numero entonces si me meten la misma cadena anterior retornara tambien el 0 aunque este no se encuentra en la cadena.

Luego se me ocurrio comparar asciis pero el problema es que no se a priori el tamaño (largo) de la cadena como para comparar 1 a 1, es decir, no se si me meten hasta numeros de 3 digitos o a numeros de 1000 digitos, esto me complica 1 al momento d edeclarar la variable donde almaceno temporalmente lo leido para verificar si es un numero o no y luego para recorrer caracter por caracter de esta cadena.

No se si se entendio bien lo que necesito, espero que si.

Saludos y gracias de antemano.
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 14/10/2007, 12:33
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Re: Detectar numeros en C

Es crear un bucle for con un contador i, desde 0 hasta strlen(cadena)-1, e mirando si el elemento i de la cadena está entre >=0 o <=9, si está, lo imprime, y si no, imprime un espacio.

Se entiende la idea?
  #3 (permalink)  
Antiguo 14/10/2007, 12:41
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Re: Detectar numeros en C

Hola de nuevo. Estoe stá hecho con C++ Builder de la firma de Borland.

Código:
int TFP::leeBlancos(AnsiString linea, int pos){
        bool enc=false;
        int i=pos;

        if((linea.Length()==i&&linea[i]==')')||linea[i]==';') return i;

        while(i<linea.Length()&&!enc) {
                if(linea[i+1]!=' ')
                        return i+1;
                else i++;
                }
        return -1;
}
Código:
int TFP::leerNumero(AnsiString linea,int& pos, Simbolos finEx){
        bool end=false;
        AnsiString st_res="";
        int i=pos,f=pos+1,res;

        while(f<linea.Length()&&!end){
                if(linea[f]!=' '&&!end){
                        end=esSim(finEx,linea[f]);
                        if(!end) end=esSim(operadores,linea[f]);
                        if(!end) f++;
                        }
                else end=true;
        }
        for(int k=i;k<f;k++)
                st_res+=linea[k];
        pos=f;
        res=StrToInt(st_res);
        return res;
}

http://c.conclase.net/librerias/macro.php?mac=isdigit

Última edición por REHome; 14/10/2007 a las 13:44
  #4 (permalink)  
Antiguo 14/10/2007, 22:51
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 6 meses
Puntos: 16
Re: Detectar numeros en C

gracias por tus respuestas, la verdad de las cosas es que no es precisamente lo que me dijiste pero con la macro isdigit logre hacer lo que necesitaba. quedo algo asi:

Código:
    FILE *inputFile;
    FILE *outputFile;
    
    char read[100];
    int i;
    int acum;
    
    inputFile = fopen("entrada.txt","r");
    outputFile = fopen("salida.txt","w");
  
    Crear(&head);
    
    while(!feof(inputFile))
    {
        fscanf(inputFile, "%s", read);

        acum = 1;

        for(i = 0; i < 1; i++)
        {
            acum *= isdigit(read[i]);
        }
        
        if(acum != 0)
        {
            if(!Buscar(&head,atoi(read)))
            {
                Insertar(&head,atoi(read));
            }
        }
    }
    
    cont = contar(head);

    fprintf(outputFile,"%d", cont);

    fclose(inputFile);
    fclose(outputFile);
insertar buscar y contar son funciones que trabajan con listas enlazadas, que utilice este TDA para almacenar los numeros que ya me ingresaron para contarlos solo una vez...

saludos y gracias nuevamente por tu ayuda
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:00.