Programación 2: Guión Práctica 11

 

PRÁCTICA DE LABORATORIO 11

Cadenas de caracteres implementados con la clase std::string

 

Parte 1

1.0 Introducción

Una cadena en el Lenguaje de Programación C puede implementarse como un vector de char que tienen almacenado una colección valores de tipo char, terminados con el carácter nulo, es decir el valor numérico 0.

En el Lenguaje de Programación C++ existe la posibilidad de usar la clase std::string que implementa las cadenas de caracteres usando el paradigma de orientación por objetos. Los métodos de la clase std::string permiten manejar las cadenas de caracteres de forma eficiente , consistente y sencilla.

 

1.1Para usar la clase std::string es necesario incluir el archivo de declaraciones de la clase por medio de:

#include <string>

1.2 Creación de instancias de la clase std::string

std::string a; // crea una cadena vacia

std::string b(a); // crea un objeto por medio del constructor de copia

std::string c = “cadena de prueba 1”; // crea un objeto y lo inicializa por medio de un const char *

 

1.3 Algunos operadores

  • Operadores de entrada y salida(Sea a un objeto de la clase std::string)std::cin >> a;getline(std::cin, a, ‘\n’);std::cout < < a;
  • Operador de copia(Sea c y bun objeto de la clase std::string)c = b;c = “cadena de prueba 2”;
  • Operador de concatenación(Sea c y a un objeto de la clase std::string)c += a;c = c + a;
  • Operadores de relaciones de equivalencia(Sea a y b un objeto de la clase std::string)a == ba != b
  • Operadores de relaciones de orden(Sea a y b un objeto de la clase std::string)a > ba >= ba < ba < = b

1.4 Otras operaciones útiles

Sean dadas las siguientes declaraciones:

std::string cad =”Cadena de prueba 3”;

std::string aux1;

char aux2[80];

  • Buscarstd::cout < < cad.find(“de”,0); //imprime la posición de la primera ocurrencia de la cadena “de” dentro de cad
  • Sustituircad.replace(2,2,”DE”); // cambia los caracteres 3 y 4 de la cadena por la cadena “DE”
  • Borrarcad.erase(7,2); // Borra los caracteres 8 y 9 de la cadena cad
  • Crear sub-cadenasaux1 = cad.substr(2,4); // Crea una cadena con los cuatros caracteres consecutivos a partir del tercer carácter de la cadena cad.
  • Método std::string::c_str() para la compatibilidad con funciones que requieran const char *strcpy(aux2, cad.c_str()); // Genera una secuencia de caracteres terminados en NULL a partir del contenido de cad

1.5 Referencia: www.cplusplus.com

1.6 Guarde el siguiente programa (tomado de www.yolinux.com). Luego compilarlo y ejecutarlo para observar los resultados

#include &lt;string&gt;
 using namespace std;
int main(){
 string a(”abcd efg”);
 string b(”xyz ijk”);
 string c;

 cout &lt; &lt; a &lt;&lt; " " &lt;&lt; b &lt;&lt; endl; // Output: abcd efg xyz ijk
 cout &lt; &lt; "String empty: " &lt;&lt; c.empty() &lt;&lt; endl; // String empty: 1
 // Is string empty? Yes it is empty. (TRUE)
 c = a + b; // concatenation
 cout &lt; &lt; c &lt;&lt; endl; // abcd efgxyz ijk
 cout &lt; &lt; "String length: " &lt;&lt; c.length() &lt;&lt; endl; // String length: 15
 cout &lt; &lt; "String size: " &lt;&lt; c.size() &lt;&lt; endl; // String size: 15
 cout &lt; &lt; "String capacity: " &lt;&lt; c.capacity() &lt;&lt; endl; // String capacity: 15
 cout &lt; &lt; "String empty: " &lt;&lt; c.empty() &lt;&lt; endl; // String empty: 0
 // Is string empty? No it is NOT empty. (FALSE)
 string d = c;
 cout &lt; &lt; d &lt;&lt; endl; // abcd efgxyz ijk
 // First character: a
 cout &lt; &lt; "First character: " &lt;&lt; c[0] &lt;&lt; endl; // Strings start with index 0 just like C.
 string f(" Leading and trailing blanks ");
 cout &lt; &lt; "String f:" &lt;&lt; f &lt;&lt; endl;
 cout &lt; &lt; "String length: " &lt;&lt; f.length() &lt;&lt; endl; // String length: 37
 cout &lt; &lt; "String f:" &lt;&lt; f.append("ZZZ") &lt;&lt; endl; // String f: Leading and trailing blanks ZZZ
 cout &lt; &lt; "String length: " &lt;&lt; f.length() &lt;&lt; endl; // String length: 40
 string g("abc abc abd abc");
 cout &lt; &lt; "String g: " &lt;&lt; g &lt;&lt; endl; // String g: abc abc abd abc
 cout &lt; &lt; "Replace 12,1,\"xyz\",3: " &lt;&lt; g.replace(12,1,"xyz",3) &lt;&lt; endl; // Replace 12,1,"xyz",3: abc abc abd xyzbc
 cout &lt; &lt; g.replace(0,3,"xyz",3) &lt;&lt; endl; // xyz abc abd xyzbc
 cout &lt; &lt; g.replace(4,3,"xyz",3) &lt;&lt; endl; // xyz xyz abd xyzbc
 cout &lt; &lt; g.replace(4,3,"ijk",1) &lt;&lt; endl; // xyz i abd xyzbc
 cout &lt; &lt; "Find: " &lt;&lt; g.find("abd",1) &lt;&lt; endl; // Find: 6
 cout &lt; &lt; g.find("qrs",1) &lt;&lt; endl;
 string h("abc abc abd abc");
 cout &lt; &lt; "String h: " &lt;&lt; h &lt;&lt; endl;
 cout &lt; &lt; "Find \"abc\",0: " &lt;&lt; h.find("abc",0) &lt;&lt; endl; // Find "abc",0: 0
 cout &lt; &lt; "Find \"abc\",1: " &lt;&lt; h.find("abc",1) &lt;&lt; endl; // Find "abc",1: 4
 cout &lt; &lt; "Find_first_of \"abc\",0: " &lt;&lt; h.find_first_of("abc",0) &lt;&lt; endl; // Find_first_of "abc",0: 0
 cout &lt; &lt; "Find_last_of \"abc\",0: " &lt;&lt; h.find_last_of("abc",0) &lt;&lt; endl; // Find_last_of "abc",0: 0
 cout &lt; &lt; "Find_first_not_of \"abc\",0: " &lt;&lt; h.find_first_not_of("abc",0) &lt;&lt; endl; // Find_first_not_of "abc",0: 3
 cout &lt; &lt; "Find_first_not_of \" \": " &lt;&lt; h.find_first_not_of(" ") &lt;&lt; endl; // Find_first_not_of " ": 0
 cout &lt; &lt; "Substr 5,9: " &lt;&lt; h.substr(5,9) &lt;&lt; endl; // Substr 5,9: bc abd ab
 cout &lt; &lt; "Compare 0,3,\"abc\": " &lt;&lt; h.compare(0,3,"abc") &lt;&lt; endl; // Compare 0,3,"abc": 0
 cout &lt; &lt; "Compare 0,3,\"abd\": " &lt;&lt; h.compare(0,3,"abd") &lt;&lt; endl; // Compare 0,3,"abd": -1
 cout &lt; &lt; h.assign("xyz",0,3) &lt;&lt; endl; // xyz
 cout &lt; &lt; "First character: " &lt;&lt; h[0] &lt;&lt; endl; // Strings start with 0 // First character: x
}

Parte II: Trabajo práctico

2.1 Diseñe y construya un programa que por medio de el método de concatenación prueba la capacidad máxima de un objeto de la clase std::string, use un entero “muy largo” para registrar el tamaño de la cadena.

2.2 Diseñe y construya un programa en C++ que por medio de un objeto de la clase std::string que convierta fechas almacenas en cadenas de la forma DD/MM/YYYY en fechas almacenadas en cadena de la forma DD de MES de AÑO. Ejemplo: “22/04/2010” en “22 de Abril de 2010”

2.3 Diseñe y construya un programa en C++ realice la conversión inversa solicitada en 2.2

2.4 Diseñe y construya un programa en C++ que se comporte de la misma manera que el programa wc del sistema LINUX, solo que la lectura debe hacerse desde el teclado hasta que se lea una línea vacía.

Realizado por:

Rafael Rivas Estrada

versión 1.0

Abril, 2010

Revisado por:

Hilda Contreras

Gilberto Diaz

 Publicado por en 9:34

 Deja un comentario

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(requerido)

(requerido)