Universidad de Costa Rica
|
|
Duración: 2 horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] En su tarea programada usted usó la función "
rebuildDquote()
"
para restaurar el valor de la hilera de entrada después de
detectar un error en los datos. Otra forma de proceder es leer la
hilera a memoria sin hacerle cambios y, si se puede determinar que
no hay errores, en ese caso se procede a remplazar los caracteres
adecuadamente, como se muestra en estos ejemplos:
flujo/entrada memoria getNextCSV() +------------------+----------------+----------------+ | ["zero"] | ["zero"] | [zero] | | [, "if "" 1" ] | [ "if "" 1" ] | [ "if "" 1" ] | | [, ] | [ ] | [ ] | | [, " 3xt" \r\n] | [ " 3xt" ] | [ " 3xt" ] | | [,"png""\n""\n] | ["png""\n""\n] | [png"\n"] | | [,12345] | [12345] | [12345] | | [,""\r\n] | [""\r\n] | [""] | | [,12\r666\r\n] | [12\r666\r\n] | [12\r666] | | [,12\r\n] | [12\r\n] | [12] | | [,"con blanco"] | ["con blanco"] | [con blanco] | | [,"con,coma"] | ["con,coma"] | [con,coma] | +------------------+----------------+----------------+
1.a) [15 pts]
Especifique la función "automataCSV()
"
que sirve para obtener y almacenar en una hilera todos los
caracteres que componen el siguiente campo CSV. Incluya los datos
de prueba
BUnit en su respuesta.
1.b) [18 pts]
Use su función "automataCSV()
" para
implementar
la función "getNextCSV()
" de la
tarea programada. El trabajo que debe
hacer es invocar primero "automataCSV()
" y luego, si
el campo CSV obtenido está de acuerdo a la especificación
RFC-4180,
procederá a removerle las parejas de comillas dobles
[""]
sustituyéndolas por una sola comilla
doble ["]
.
2) [33 pts]
+--------------------------------+ | MZ..<...'.....7.......o....... | | ..triturar.................... | | ..g...6........)("33$.....J... | | ..P...=...matar........?!??;;^ | | o.z.o.i.o...o...o...o...o..... | | ..n...j...f...b.destruir..V... | | .....bonga..i.H.i.3.i...i...i. | | i...i...i...i.matanga...i.'.i. | | ......}...A...1...$....canga.. | +--------------------------------+ chunga.exe |
Jimmy Neutron descubrió que muchos de los programas
ejecutables que usan los estudiantes de la
ECCI incluyen comandos
satánicos que es necesario censurar. Para eso, propuso
construir un
módulo que
recibe como entrada un programa ejecutable y produce una lista de
las palabras que contiene el texto, en donde "palabra" significa
"varias letras juntas, sin espacios ni caracteres raros".
Escriba un programa que permita extraer todas las hileras de un archivo. Incluya un argumento que indique cuál es el tamaño mínimo de una palabra, para evitar que letras solas aparezcan en la salida. Su programa no debe imprimir cada palabra más de una vez. |
3) [33 pts] El problema del método
replace()
de la hilera C++ estándar es que no
permite una sub-hilera como argumento. Por ejemplo, no es posible
cambiar de un sólo tirón una palabra por otra
así:
{ std::string str; // ... str.replace("banano", "gorila"); }
3.a) [15 pts]
Especifique la clase "str_replace
" que aporta la
funcionalidad ya mencionada, pero recuerde que en muchas ocasiones
una sub-hilera aparece en varios lugares dentro de la hilera.
Incluya los datos de prueba
BUnit en su respuesta.
3.b) [15 pts] Implemente su clase.
3.c) [3 pts]
Explique si vale la pena o no que su nuevo método
"replace()
" sea implementado como un método
"inline
".
Adolfo Di Mare <adolfo@di-mare.com>.
|