Publi

  • Cambio de base (de base b1 a b2… hasta base36 o tal vez más)

    Hace tiempo tuve la necesidad de hacer una función de cambios de base, pero que no estuviera limitada, es decir, no tuviera definido qué base vamos a introducir y qué base debe devolver. Es decir, convertiremos un número en base b1 a base b2; la limitación, el número de caracteres con los que contemos, en el ejemplo hay hasta base 36, y es fácil extenderlo hasta base256… un número en hexadecimal no tiene desde el 0 al 9 y de la A a la F, pues un base36, del 0 al 9 y de la A a la Z.… Leer artículo completo

  • Volteando cadenas

    En C, una de las pequeñas cosas que a veces nos hace más lentos a la hora de hacer un pequeño programa es la posibilidad de darle la vuelta a una cadena. Bien, aquí traigo un pequeño código (función y ejemplo) de strrev, que además de poder dar la vuelta a una cadena, puede manipular sólo ciertos caracteres:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    #include <string.h>

    char *strrev(char *str, int strl)
    {
        /* Creamos punteros al principio y al final de la cadena */
        /*       C   A   R   A   C   T   E   R   5   \0 */
        /*       |                               |      */
        char *start = str, *end = str + strl - 1;
        char temp;
        /* Iteramos hasta que el principio y el fin coincidan */
        while(start < end)
            {
                /* Intercambiamos los caracteres */
                /* 1º  C A R A C T E R 5 */
                /* 2º  5 A R A C T E R C */
                /* 3º  5 R R A C T E A C */
                /* 4º  5 R E A C T R A C */
                /* 4º  5 R E T C A R A C */
                temp = *start;
                *start++ = *end;
                *end-- = temp;
            }
        return str;
    }

    /* Ejemplo */
    int main()
    {
        char cadena[50]="Una cadena de caracteres cualquiera";
        char tmp[50]="Una cadena de caracteres cualquiera";
        char *cad2=cadena;
        printf("Cadena original: %s\n", cadena);
        printf("Cadena al revés: %s\n", strrev(tmp, strlen(tmp)));
        strrev(cadena+14, 10);
        printf("Caracteres al revés: %s\n", cad2);
        return 0;
    }

    Esta función la encontré hace mucho tiempo navegando y me pareció muy interesante, sobre todo por cómo está hecha, creo que es de las más rápidas.… Leer artículo completo