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.
Pingback: Poesía binaria » Cambio de base (de base b1 a b2… hasta base36 o tal vez más) /