Vacaciones diciembre de 2013 USAC Guatemala 27/12/13
Compiladores 2 Aux. Carlos Davila
Manejo de strings
Documentacin de almacenamiento de strings en memoria: http://ocw.uc3m.es/ingenieria-telematica/arquitectura-de- ordenadores/lecturas/html/drm.html (BUSCAR FIGURA 3-18) Leer: Aunque las letras de cada string estn almacenadas en posiciones consecutivas, los strings no estn uno a continuacin de otro sino en zonas de memoria dispersas. Los chars, se almacenan como un nmero, no tienen carcter de final de cadena y tampoco se almacenan en el heap.
Ejemplo entera main(){ cadena a = "hola "+"mundo!"+ '/n'; imprimir<-a; } Tabla de simbolos: Nombre Tipo Tamao Posicion main main 1 ----- a string 1 0 print metodo 1 -----
Representacion intermedia: Carcter ASCII h 104 o 111 l 108 a 97 32 NULL 0 //Fin cadena hola m 109 Vacaciones diciembre de 2013 USAC Guatemala 27/12/13 Compiladores 2 Aux. Carlos Davila u 117 n 110 d 100 o 111 ! 33 NULL 0 //Fin cadena mundo! /n 10
Representacion final: Carcter ASCII h 104 o 111 l 108 a 97 32 m 109 u 117 n 110 d 100 o 111 ! 33 /n 10 NULL 0
Solucin propuesta (es una propuesta o solucin, no una regla, cualquiera puede proponer su idea, incluso esta no es una solucin optima es simplemente para dar una idea o aproximacin al solucin real y optima) main(){ t1 = p + 0; t2 = h; //puntero del string hola mundo!/n t3 = t2 + 0; heap[t3] = 104; //h t4 = t2 + 1; heap[t4] = 111; //o t5 = t2 + 2; heap[t5] = 108; //l t6 = t2 + 3; Vacaciones diciembre de 2013 USAC Guatemala 27/12/13 Compiladores 2 Aux. Carlos Davila heap[t6] = 97; //a t7 = t2 + 4; heap[t7] = 32;//espacio t8 = t2 + 5; heap[t8] = 0; //NULL de hola h = h + 6; h = h -1; //se sobreescribe el caracter nulo para dejar las cadenas continuas t9 = h; t10 = t9 + 0; heap[t10] = 109; //m t11 = t9 + 1; heap[t11] = 117;//u t12 = t9 + 2; heap[t12] = 110;//n t13 = t9 + 3; heap[t13] = 100;//d t14 = t9 + 4; heap[t14] = 111;//o t15 = t9 + 5; heap[t15] = 33;//! t16 = t9 + 6; heap[t16] = 0; //NULL mundo! h = h + 7; h = h - 1; //sobreescribir nulo t17 = h; t18 = t17 + 0; heap[t18] = 10; //salto de lnea Vacaciones diciembre de 2013 USAC Guatemala 27/12/13 Compiladores 2 Aux. Carlos Davila t19 = t18 + 1; heap[t19] = 0; //NULL final de candena hola mundo!/n h = h + 2; pila[t1] = t2; //asignacin puntero t20 = p + 1; //paso de parmetros para el mtodo imprimir, main tienen tamao 1; t21 = t20 + 0; t22 = p + 0; t23 = pila[t22]; pila[t21] = t23; p = p + 1; print(); p = p - 1; }
Vacaciones diciembre de 2013 USAC Guatemala 27/12/13 Compiladores 2 Aux. Carlos Davila Compilacin del archivo C++ adjunto, EN LINUX, DISTRIBUCIONES BASADAS EN DEBIAN 1. Instalar g++: a. sudo apt-get install g++ 2. Ubicarse en la ruta del archivo a. cd <carpeta> 3. Compilar el archivo cadenas.cpp a. g++ -o cadenas cadenas.cpp