4.6. Ejercicios

Las soluciones a los ejercicios se pueden encontrar en el documento electrónico titulado «The Thinking in C++ Annotated Solution Guide», disponible por poco dinero en www.BruceEckel.com.

  1. Escriba y pruebe una función que invierta el orden de los caracteres en una cadena.

  2. 2. Un palindromo es una palabra o grupo de palabras que tanto hacia delante hacia atrás se leen igual. Por ejemplo "madam" o "wow". Escriba un programa que tome un string como argumento desde la línea de comandos y, usando la función del ejercicio anterior, escriba si el string es un palíndromo o no.

  3. 3. Haga que el programa del Ejercicio 2 retorne verdadero incluso si las letras simetricas difieren en mayúsculas/minúsculas. Por ejemplo, "Civic" debería retornar verdadero aunque la primera letra sea mayúscula.

  4. 4. Cambie el programa del Ejercicio 3 para ignorar la puntuación y los espacios también. Por ejemplo "Able was I, ere I saw Elba." debería retornar verdadero.

  5. 5. Usando las siguientes declaraciones de string y solo char (no literales de cadena o números mágicos):

    string one("I walked down the canyon with the moving mountain bikers."); string two("The bikers passed by me too close for comfort."); string three("I went hiking instead.");

    produzca la siguiente frase:

    I moved down the canyon with the mountain bikers. The mountain bikers passed by me too close for comfort. So I went hiking instead.

  6. 6. Escriba un programa llamado "reemplazo" que tome tres argumentos de la línea de comandos representando un fichero de texto de entrada, una frase para reemplazar (llámela from), y una cadena de reemplazo (llámela to). El programa debería escribir un nuevo fichero en la salida estandar con todas las ocurrencias de from reemplazadas por to.

  7. 7. Repetir el ejercicio anterior pero reemplazando todas las instancias pero ignorando las mayúsculas/minúsculas.

  8. 8. Haga su programa a partir del Ejercicio 3 tomando un nombre de fichero de la linea de comandos, y despues mostrando todas las palabras que son palíndromos (ignorando las mayúsculas/minúsculas) en el fichero. No intente buscar palabras para palíndromos que son mas largos que una palabra (a diferencia del ejercicio 4).

  9. 9. Modifique HTMLStripper.cpp para que cuando encuentre una etiqueta, muestre el nombre de la etiqueta, entonces muestre el contenido del fichero entre la etiqueta y la etiqueta de finalización de fichero. Asuma que no existen etiquetas anidadas, y que todas las etiquetas tienen etiquetas de finalizacion (denotadas con </TAGNAME>).

  10. 10. Escriba un programa que tome tres argumentos de la línea de comandos (un nombre de fichero y dos cadenas) y muestre en la consola todas la líneas en el fichero que tengan las dos cadenas en la línea, alguna cadena, solo una cadena o ninguna de ellas, basándose en la entreada de un usuario al principio del programa (el usuario elegirá que modo de búsqueda usar). Para todo excepto para la opción "ninguna cadena", destaque la cadena(s) de entrada colocando un asterisco (*) al principio y al final de cada cadena que coincida cuando sea mostrada.

  11. 11. Escriba un programa que tome dos argumentos de la linea de comandos (un nombre de fichero y una cadena) y cuente el numero de veces que la cadena esta en el fichero, incluso si es una subcadena (pero ignorando los solapamientos). Por ejemplo, una cadena de entrada de "ba" debería coincidir dos veces en la palabra "basquetball", pero la cadena de entrada "ana" solo deberia coincidir una vez en "banana". Muestre por la consola el número de veces que la cadena coincide en el fichero, igual que la longitud media de las palabras donde la cadena coincide. (Si la cadena coincide más de una vez en una palabra, cuente solamente la palabra una vez en el cálculo de la media).

  12. 12. Escriba un programa que tome un nombre de fichero de la línea de comandos y perfile el uso del carácter, incluyendo la puntuación y los espacios (todos los valores de caracteres desde el 0x21 [33] hasta el 0x7E [126], además del carácter de espacio). Esto es, cuente el numero de ocurrencias para cada carácter en el fichero, después muestre los resultados ordenados secuencialmente (espacio, despues !, ", #, etc.) o por frecuencia descendente o ascendente basado en una entrada de usuario al principio del programa. Para el espacio, muestre la palabra "espacio" en vez del carácter ' '. Una ejecución de ejemplo debe mostrarse como esto:

    Formato secuencial, ascendente o descendente (S/A/D): D t: 526 r: 490 etc.

  13. 13. Usando find() y rfind(), escriba un programa que tome dos argumentos de lánea de comandos (un nombre de fichero y una cadena) y muestre la primera y la última palapra (y sus indices) que no coinciden con la cadena, asi como los indice de la primera y la última instancia de la cadena. Muestre "No Encontrado" si alguna de las busquedas fallan.

  14. 14. Usando la familia de fuciones find_first_of (pero no exclusivamente), escriba un programa que borrará todos los caracteres no alfanuméricos excepto los espacios y los puntos de un fichero. Despues convierta a mayúsculas la primera letra que siga a un punto.

  15. 15. Otra vez, usando la familia de funciones find_first_of, escriba un programa que acepte un nombre de fichero como argumentod elinea de comandos y después formatee todos los números en un fichero de moneda. Ignore los puntos decimales después del primero despues de un carácter no mumérico, e redondee al

  16. 16. Escriba un programa que acepte dos argumentos por línea de comandos (un nombre de fichero y un numero) y mezcle cada paralabra en el fichero cambiando aleatoriamente dos de sus letras el número de veces especificado en el segundo parametro. (Esto es, si le pasamos 0 a su programa desde la línea de comandos, las palabras no serán mezcladas; si le pasamos un 1, un par de letras aleatoriamente elegidas deben ser cambiadas, para una entrada de 2, dos parejas aleatorias deben ser intercambiadas, etc.).

  17. 17. Escriba un programa que acepte un nombre de fichero desde la línea de comandos y muestre el numero de frases (definido como el numero de puntos en el fichero), el número medio de caracteres por frase, y el número total de caracteres en el fichero.