Todos los ejemplos a continuación modifican la cadena de entrada, por lo que no hay salida separada. La lectura de la entrada del usuario y la impresión se dejan como ejercicio para el lector.
Lo más importante a tener en cuenta es que los caracteres ASCII son solo números de 8 bits, y todas las operaciones aritméticas comunes funcionan en ellos. Más que eso, están organizados de manera inteligente para que las letras estén en orden lexicográfico. ‘a’ + 1 == ‘b’ y así sucesivamente.
Primero, le mostraré cómo hacer lo que sugiere en la pregunta: cambie cada carácter por el siguiente en el alfabeto. No hay necesidad de cambiar aquí. Asumiré que ‘z’ debe cambiarse a ‘a’ … debe especificar cómo se deben manejar los casos de esquina.
transliterate nulo (char * s) { size_t i = 0; while (s [i]! = '\ 0') {// solo toca letras if (isalpha (s [i])) s [i] = (inferior (s [i]) == 'z') ? s [i] - ('z' - 'a') : s [i] + 1; } }
Ahora, usar un interruptor da más libertad para asignar los personajes. Se vería algo así:
- Si BH = 16 y AY = 25, ¿cuál es el valor de BYE?
- Si | x-2 | = – | 1-x |, ¿por qué no se puede decir que (x-2) ^ 2 = (1-x) ^ 2? Entonces, ¿por qué se puede decir que (x-2) ^ 2 = (1-x) ^ 2 if | x-2 | = | 1-x |?
- En matemáticas (no recuerdo el nivel) nos enseñaron que teníamos que demostrar que existía una solución y luego encontrar la solución. Nos saltamos la “prueba de que hay una solución”. ¿Cómo se hace esto?
- Cómo crear una columna con X número de filas, dado que una celda tiene el valor de X en Excel
- ¿Está log (x) vinculado a (0, infinito)?
transliterate2 vacío (char * s) { size_t i = 0; while (s [i]! = '\ 0') { interruptor (s [i]) { caso 'a': s [i] = 'b'; rotura; caso 'b': s [i] = 'c'; rotura; // y así ... } } }
Si puede definir una operación aritmética que haga lo que necesita, hágalo y documente en un buen comentario. Si se trata de una transliteración más o menos aleatoria, escriba el interruptor.
Ah, y una tercera opción … hacer una tabla de búsqueda. Un buen compilador optimizará la versión del interruptor desde arriba a aproximadamente el mismo código, por lo que no debería haber una diferencia significativa en la velocidad.
búsqueda de caracteres [256]; búsqueda ['a'] = 'b'; búsqueda ['b'] = 'c'; // haz una buena función init, o usa una lista de iniciadores transliterate3 vacío (char * s) { para (size_t i = 0; s [i]; s [i] = búsqueda [s [i]]); }