Resultados 1 al 4 de 4

Caracteres alfanumericos en C

  1. #1 Caracteres alfanumericos en C 
    Avanzado
    Fecha de ingreso
    Apr 2003
    Mensajes
    173
    Descargas
    0
    Uploads
    0
    Hola a tod@s, estoy programando en C y necesito analizar textos caracter a caracter, para, segun encuentre uno u otro actue de una forma. Voy usando Switch para ir seleccionando caracteres concretos. Mi problema esta en que a la hora de los numeros me es indiferente cual sea (0-9), mi pregunta es ¿Existe alguna variable en C que defina todos los numeros y letras? ¿como puedo definir esto en C y que un Switch -> case me lo reconozca? ¿alguna otra solucion?. Esto lo estoy empleando para un analizador de lexico.
    Muchas gracias a tod@s
    No hay 2 sin 3, siguiendo lo conseguire
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Hay muchas formas de resolverlo. Una muy intuitiva puede ser usar una variable "char" y ver si esa variable pertenece a un rango. Por ejemplo:

    Código:
    #include <stdio.h>
    #include <string.h>
    
    void main (void)
    {
    	char c;
    	int i;
    
    	char *texto;
    
    	texto="Hola como estas? son las 19:24. Espero que este ejemplo te ayude";
    
    	for(i=0; i<strlen(texto); i++){
    		c=texto[i];
    		
    		if ((c>=0x30)&&(c<=0x39)){
    			printf("numero ");
    		}
    		else if ((c>=0x41)&&(c<=0x5A)){
    			printf("mayuscula ");
    		}
    		else if((c>=0x61)&&(c<=0x7A)){
    			printf("minuscula ");
    		}
    		else{
    			printf("%c", c);
    		}
    	}
    }
    En el caso de un Switch-case, puedes crear una variable "entera" de forma que almacene un valor según el rango al que pertenece el caracter leido:

    Código:
    int val;
    
    if ((c>=0x30)&&(c<=0x39)){
    val=0; //val=0 significará que el caracter es un número.
    }
    
    else if ((c>=0x41)&&(c<=0x5A)){
    al=1; //val=1 significa que se trata de una letra mayúscula.
    }
    
    ...etc...
    y luego preguntas por "val" en el switch:

    Código:
    switch (val){
    case 0: printf("Número");
    break;
    case 2: printf("minuscula");
    break;
    ...etc...

    Existen otras técnicas un poco más complejas, basadas en asignar valores a los tokens generados mediante expresiones regulares.

    De todas formas si es por conocimiento bien, pero existen herramientas como Flex para implementar reglas léxicas, simplemente escribiendo las expresiones regulares que definan el lenguaje. Del mismo modo herramientas como Cup, permiten generar gramáticas para describir lenguajes independientes del contexto. Combinando el analizador léxico y sintáctico (combinar expresiones regulares con una gramática), podrías construir un parser para textos con un formato de manera rápida y sencilla.

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Avanzado
    Fecha de ingreso
    Apr 2003
    Mensajes
    173
    Descargas
    0
    Uploads
    0
    estas echo una maquina!!
    al final encontre la solucion de poner en el mismo case las posibles opciones, no es la mas optima pero para lo que quiero me sirve.
    Muchas gracias por vuestro tiempo
    No hay 2 sin 3, siguiendo lo conseguire
    Citar  
     

  4. #4  
    Moderador Global
    Fecha de ingreso
    Aug 2005
    Mensajes
    6.279
    Descargas
    7
    Uploads
    0

    . . . . . . . . . . . . . . . . . . . .
    [[ NORMAS DEL FORO ]]
    . . . . . . . . . . . . . . . . . . . .
    __________
    Citar  
     

Temas similares

  1. Romper contraseñas de 16 caracteres
    Por LUK en el foro INGENIERIA INVERSA
    Respuestas: 0
    Último mensaje: 04-06-2013, 14:47
  2. problema para leer caracteres en modula 2
    Por olaznog en el foro PROGRAMACION DESKTOP
    Respuestas: 4
    Último mensaje: 17-04-2007, 15:59
  3. Caracteres de Control Unicode
    Por Cypress en el foro OFF-TOPIC
    Respuestas: 0
    Último mensaje: 06-12-2006, 17:49
  4. encontrar caracteres ascii
    Por morza2 en el foro OFF-TOPIC
    Respuestas: 7
    Último mensaje: 19-01-2005, 21:56
  5. Respuestas: 4
    Último mensaje: 18-11-2004, 20:23

Marcadores

Marcadores