Está en la página 1de 5

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

4. Ejecutar el archivo cadenas
a. ./cadenas

También podría gustarte