Clase3 (3)

Anuncio
Computación II
Clase 3
Strings - Archivos
Roberto Konow
Universidad Diego Portales
Algunos ejemplos fueron extraidos de: The George Washington University
Noticias

Próximo Viernes 28 de Agosto:
11.20 AM

Bolsa de comercio de Santiago

Visita guiada



Charla sobre el nuevo sistema transaccional
desarrollado por ex alumnos UDP
Este Viernes → Control

Strings

Archivos
Notas del control + Pauta en la intranet
Objetos

Primera definición:




Un objeto es una instancia de una clase, que comparte
las propiedades definidas en la clase
Generalmente una clase define propiedades y acciones
(variables y funciones)
Ejemplo de clase:

Propiedades: Marca, Color, Tipo

Acciones: Comprar, Beber, Botar
Ejemplo de Objeto que instancia a la clase Cerveza:

Una lata de Heineken

Una botella de Cristal
Strings



Es una clase que ayuda a manejar las cadenas
de carácteres.
Ejemplos: “hola”, “computación”.
Funciones útiles son la concatenación y la
comparación



Concatenación: “Informática”+“ Telecomunicaciones”=“Informatica
Telecomunicaciones”
Comparación: “aaaa”<“bbbbl” // alphabetical
Buscar, obtener, modificar, eliminar, insertar
“substrings dado un string”
La clase String




C++ tiene una libreria <string> .
Incluirla en los programas cuando se necesite
usar strings: #include <string>.
En esta libreria la clase “string” esta definida e
implementada.
Es mucho mas fácil que utilizar la definición de
String en C (arreglo de carácteres).
Iniciación

Las siguientes declaraciones son equivalentes.
string x(“Informática Telecomunicaciones”);
string x= “Informática Telecomunicaciones”;
Operaciones con Strings

Sea x e y dos Strings.

Para concatenar x e y se escribe : “x+y”.
string x= “Informática”;
string y= “Telecomunicaciones”;
string z;
z=x+y;
cout<<“z=“<<z<<endl;
z =z+“ Son Rock Star”;
cout<<“z=“<<z<<endl;
Output:
z=Informática Telecomunicaciones
z= Informática Telecomunicaciones
Son Rock Star
Comparaciones usando Strings



Podemos comparar dos strings utilizando los
siguientes operadores booleanos: : ==, !=, <, <=, >, >=
La comparación es alfábetica.
El resultado será : true ó false.
Ejemplos
string x= “Informática”;
char y[]= “Telecomunicaciones”;
char *p = “Rock Star”;
If (x<y)
cout<<“x<y”<<endl;
If (x<“árbol”)
cout<<“x<tree”<,endl;
If (“árbol” != x)
cout<<“low != x”<<endl;
if( (p>x)
cout<<“p>x”<<endl;
Else
cout<<“p<=x”<<endl;
Salida:
x<y
x<tree
low != x
p>x
El operador índice

Si x es un objeto de tipo string , y se desea
obtener un el valor del k-ésimo carácter, se
escribe: x[k] .
string x= “hola”;
char c=x[0]; // c es ‘h’
c=x[1]; // c es ‘o’
c=x[2]; // c es 'l'

Esto hace que los strings se vean como arreglo
de chars.
Obtener el tamaño


Para obtener el largo de un string x, se puede
utilizar la función x.length() ó x.size().
Para revisar si el string es vacío (no tiene
ningún carácter en él se usa x.empty() que
retorna true o false.
string x= “Informática”;
int largo = x.length();
cout << “el largo del string x es: “ << largo << endl;
if (x.empty())
{
cout << “ El string x se encuentra vacío” << endl;
}
Obteniendo substrings


Lógicamente un string es una secuencia de sub
strings. Por ejemplo: “to” es parte del string
“producto”.
Para obtener una parte (substring) de un string
se utiliza la función substr(inicio,fin).
string y = x.substr(pos,len);
string y = x.substr(pos);//x[pos..fin-1]
Reemplazando un String dentro
de otro


Supongamos que x es un objeto de tipo string y
que desea reemplazar en el rango
[pos,pos+len] de x por y.
Para hacerlo se escribe:
x.replace(pos,len,y);

Donde y es otro string.
Eliminando un substring dentro
de un string

Para borrar un sub string en el rango
[pos,pos+len] dentro de x se realiza:
x.erase(pos,len);

El valor de len es x.length()
x.erase(pos); // elimina x[pos..end-1]

Para borrar todo el contenido de x se realiza:
x.clear( );
Búsqueda dentro de un string

Para buscar por el string y en el string x se
realiza:
int posicion = x.find(y);


Este método entrega la posición de la primera
aparición del substring y en x de izquierda a
derecha. Si no se encuentra, entregará el
tamaño del string.
Para buscar desde una posición pos dada :
int posición = x.find(y, pos);
Ejemplo






El protocolo de correos electronicos (POP3, y SMTP) los
mensajes vienen estructurados.
Los programas que leen estos protocolos deben filtrar la
información para que sea legible por el usuario
En general el protocolo utiliza la sentencia
“FROM:[email protected]”
Escriba un programa que reciba un string de parámetro donde
el string contiene una sentencia con la misma estructura
descrita.
El programa debe ser capaz de imprimir en pantalla el texto a
partir de donde apárezca “FROM:”
Ejemplo:
“FROM: [email protected]“
El usuario es: [email protected]
¿Cómo se hace?
string x=“FROM:[email protected]”;
int dospuntos=x.find(‘:’);
string prefijo=x.substr(0,dospuntos); //=FROM
string sufijo = x. substr(dospuntos+1);
cout<<“este mensaje es de: ”<<sufijo<<endl;
Resumen
Función
Ejemplo
Resultado
Constructor
string x = “rock”
string y(“star”)
Se inicializa el string x e y con el contenido “rock”
y “star” correspondiente
Concatenación
string x = “rock”;
string y = “ star”;
string z = x+y;
El string z quedará como “rock star”
Comparación
X == Y
X <= Y
X >= Y
X != Y
False
False
True
True
Indice
X[i]
X[1]
Y[1]
El i-ésimo elemento de X
El segundo elemento de X ('o')
El segundo elemento de Y ('t')
Tamaño
x.length()
El tamaño de x = 4
Substring
x.substr(inicio,fin)
x.substr(0,2)
Obtener el substring desde inicio hasta fin
“roc”
Reemplazar
x.replace(inicio,fin,y)
x.replace(0,2,y)
Reemplazar en X[inicio,fin] por el string y
Borrar Substring
x.erase(inicio,fin)
x.erase(0,2)
Eliminar el contenido desde inicio hasta fin
x = “k”
Buscar posición
x.find(“ck”)
Retorna 2, la primera posición de izquierda a
derecha
Archivos
Tres nuevas clases:



ifstream
Input file stream
#include <ifstream>
ofstream
output file stream
#include <ofstream>
fstream
file stream (input & output)
#include <fstream>
ofstream

Funciones principales:

Construcción:
ofstream miArchivo(“archivo.txt”);
ó
ofstream miArchivo;
miArchivo.open(“archivo.txt);

Escritura:
miArchivo << “texto a escribir”;

Desconexión:
miArchivo.close()
ifstream

Funciones principales:

Construcción:
ifstream miArchivo(“archivo.txt”);
ó
ifstream miArchivo;
miArchivo.open(“archivo.txt);

Lectura:
string linea;
getline(miArchivo,linea)
miArchivo >> linea;
Ifstream (cont.)

Leer un caracter:


miArchivo.get(ch)
Cerrar:

miArchivo.close()
Otras propiedades

¿Cómo saber cuando es el final de un archivo?

miArchivo.eof()
Retorna true cuando se llega al final del archivo
string line;
ifstream myfile ("example.txt");
while (! myfile.eof() )
{
getline (miArchivo,linea);
cout << linea << endl;
}

Cada vez que se lee una linea se avanza en la
lectura del archivo
Tarea

Descarar el archivo:
http://pizzachili.dcc.uchile.cl/texts/nlang/english.gz

(se descomprime con winrar)

Leer todo el archivo con ifstream

Cambiar todas las vocales por el caracter “-”


Escribir en otro archivo llamado “tarea.txt” el texto
cambiado del primer archivo.
Leer el nuevo archivo y mostrar en pantalla la
frecuencia de aparición de cada letra.
Ejemplo

Desde el archivo de lee la siguiente linea:


“How do I learn the c++ programming language?”
Se cambia el contenido al siguiente:

“H-w d- I l—rn th- -++ pr-gr-mm-ng l-ng—ge?

Se escribe esa linea en el archivo “tarea.txt”

Se lee el contenido del archivo “tarea.txt”

Despliega la información:
H→1
w→1
d→1
I→2
r→2
… etc
Documentos relacionados
Descargar