Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: C++ String Class  (Leído 15043 veces)
0 Usuarios y 1 Visitante están viendo este tema.
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« en: 18/09/2006, 16:14:08 »

¿Qué es la clase string?
Es la encargada de modelar una cadena de caracteres, encapsulando mucha de la programación a bajo nivel y brindando métodos capaces de cumplir con muchas de las funciones que necesitaremos para manipular el tipo de datos más utilizado en cualquier programa.

¿Dónde la encontramos?
La clase string está definida en la cabecera string (#include <string>) que forma parte del C++ estandar. Tan solo incluyendola en nuestros módulos podremos acceder a ella. Pero si buscamos un poco más de comodidad, sea porque usaremos esa clase muchas veces en el código o por legibilidad, deberemos especificar que se utilizará el espacio de nombres estandar (using namespace std;).

Código
#include <string>
using namespace std;

Aclaración: No confundir <string> con <string.h> (la cual no contiene la definición de la clase string), ni con <cstring.h> (que contiene solo las funciones para trabajar con strings terminados en NULL - por ejemplo para trabajar con char cadena[45])
Aclaración: Si se incluye el módulo <iostream> no hace falta incluir <string>, porque la segunda está incluida en la primera. Incluir las dos no provoca error y mejora la legibilidad.

Instanciación e inicialización.
La clase string es muy especial en cuanto a su instanciación e inicialización. A continuación se colocan todas las formas de hacerlo.

Código
string s1; 
s1 = "http://";
string s2 = "foros";
string s3(".clubdesarrolladores.com.ar");
string s4(1, char(32));
string s5(2, &#39;\n&#39;);
string s6 (s3, 5, 15);
string s7 ("de");
string msg = s1+s2+s3+s5+s2+s4+s7+s4+s6;
 

Como se puede ver, es muy flexible su instanciación e inicialización. El objeto msg contendrá:

Citar

En los proximos posts se continuará con los siguientes temas:

Operadores
Funciones miembro
Funciones externas
« Última modificación: 25/09/2006, 20:27:20 por CID » En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #1 en: 30/09/2006, 18:06:49 »

Operadores

La clase string hace uso de sobrecarga de operadores para facilitarnos la escritura de código que manipule operaciones comunes con cadenas de caracteres.

Operador de asignación (=)

Permite modificar la cadena que contiene la instancia de la clase.
Ejemplos:
Código
s1 = "Texto";

Operador de concatenación (+ y +=)
Permite unir dos cadenas de caracteres en una sola. La segunda se utiliza para agregar al final.
Ejemplos:
Código
"Un " + s1 + " Importante";

Operadores de comparación (==, !=, <, >, <= y >=)
Retornan valores booleanos true o false dependiendo que se cumpla o no la condición que el operador indica.
Ejemplos:
Código
bool iguales = s1 == "texto";//retorna falso porque son case sensitive

Operador indice ([])
Permite el acceso a una posición absoluta dentro de la cadena de caracteres. Trabaja con tipo de dato char.
Ejemplos:
Código
s1[0] = (s1+" largo")[1];

Nota. Los operadores de inserción y extracción (<< >>) no forman parte de la clase string, los implementan otras clases, por ejemplo las de salidas y entradas standart cin y cout.

PD: Faltaria colocar muchos ejemplos más.
En línea

Ge0Ks
Technocrat
*********

Prestigio: 3
Desconectado Desconectado

Mensajes: 131



« Respuesta #2 en: 25/10/2006, 23:21:05 »

mas ejemplos:

Convertir un string a cstring

Código
....
string cadena;
cout<<"Inserte una cadena ";
getline(cin,cadena);//lee un string
cin.ignore(255,&#39;\n&#39;); //ignora el enter ke se va a guardar en el buffer (solo para ciclos repetitivos)
ofstream archi(cadena.c_str());//declara archi como objeto de salida con el lnk de cadena (manejo archivos)
....

Insertar un string en otro:

Código
....
string str1 = "Programar En C++";
string str2 = "Es Divertido";
str1.insert(str2.size(),str2); //inserta el tamaño de str2 y la cadena str2 a str1
...
//El Resultado seria "Programar En C++ Es Divertido"
 

Weno este codigo es un poco mas complicado pero ta weno, hace minusculas a un string...
tienen ke incluir la libreria <algorithm> ....

Código
....
std::transform(str1.begin(), str1.end(), str1.begin(), (int( * )(int))std::tolower);//Donde str1 es tu string
....
 

Borrar Parte De Un String:

Código
....
string str1 = "clubdesarrolladores";
str.erase(4,7);
cout<<str1<<endl; //muestra clublladores xD

Buscar Una Subcadena:

la funcion find(string, posicion), devuelve un tipo string::npos (conocido como npos)

Código
....
string str1 = "germancito" ;
string str2 = "pablito";
if (str1.find(str2,0) == string::npos) cout<<" No Toyyy" ;
.....
 

Cadena De strings:

Código
....
string h[10];
for (int i=0; i<10; i++)
cin>>h[10]
....

Bueno Esto es todo por ahora... lo unico ke les puedo dejar son los operadores sobrecargados...

*, +, +=, ==, !=, <, >, <=, >=, <<, >>, [] Cheesy:D:D:D:D y esas caritas tmb estan sobrecargadas jajaja

Espero ke les haya servido ...

« Última modificación: 25/10/2006, 23:36:13 por Ge0Ks » En línea




Gracias Mari -- germanb@hotdesign.com.ar --
                  -- germanazo@papadedios.com.ar --
Ge0Ks
Technocrat
*********

Prestigio: 3
Desconectado Desconectado

Mensajes: 131



« Respuesta #3 en: 30/10/2006, 13:09:59 »

Mas Dame C++ Somos Programadores...  (texto extraido de aca http://youtube.com/watch?v=9Iozx-6XymE)

Bueno Pensando ke los metodos anteriores eran mas ke suficiente me ekivoke, aca encontre mas metodos ke ni los conocia, pero ke estan buenos, espero ke a uds les sirva esto.

Anexar Posiciones... (similar a insert)

este metodo anexa a str2 las posiciones desde el subindice 2 hasta el tamaño total de str1

Código
#include <iostream.h>
#include <string.h>
 
void main() {
string str1="pachorra";
string str2="ca";
str2.append(str1, 2, str1.length()); // anexar...
cout<<"Muestra ";
cout<<"\""<<str2<<"\""; //Muestra "Cachorra"
getchar();
} //compilado en borland c++
 

Asignacion De Letras En Distintas Posciciones

Como el operador = y el [] estan sobrecargados es totalmente valido hacer lo siguiente...

Código
...
str1="german";
str2="divs";
str1[4]=str2[1]=&#39;e&#39;; //se modifican las posiciones 4 de la cadena y la posicion 1 de la cadena 2 por la letra &#39;e&#39;
....
 

Notar la diferencia entre las comillas, una comilla simple es para una letra o sea lo que necesitamos para este caso mientras que las comillas dobles es para una cadena de caracteres...

El ejemplo mostraria a str1 como "germen" y a str2 como "devs"

Comparacion de rango

el metodo "at" lanza una excepcion "out_of_range" cuando se intenta de ir mas alla del final del objeto string, un ejemplo del codigo....

Código
...
string str="hola";
for (int i = 0; i < str.length(); i++)
   cout<<str.at(i); //si &#39;i&#39; superaria por error el tamaño del string devolveria out_of_range...
...
 

Intercambio de Objetos

Este metodo sirve para intercambiar dos objetos string (no se si se puede con mas), esto se puede lograr con la funcion swap, un tipico ejemplo es este...

Código
...
string str1="hola";
string str2="chau";
str1.swap( str2 );
....
 


el intercambio es evidente, en str1 pasaria a ser str2 y str2 pasaria a ser str11... haciendo esto se evita agregar un auxiliar e ir intercambiandolo manualmente

Funcion Substr

Esta funcion miembro lo que hace es recuperar una cadena de un string, como por ejemplo, se declara  "aeroplano" a un string y si se utiliza esta funcion con sus parametros podemos obtener distintos string sacandole un pedazo al otro string.

Código
....
string str1="aeroplano";
cout<<str1.substr(4,5)<<endl; //desde la posicion 4 contando 5 caracteres, esto mostraria "plano"
...
 

Otros Metodos De Comparacion

Todos sabemos que los operadores de comparacion estan sobrecargados pero estos metodos nos limitan a comparar algunos tipos de casos, aca les dejo un par de metodos utiles para estas cosas.

La funcion miembro sirve para comparar lexicograficamente las cadenas y esta sobrecargada, asi que se les puede pasar distintos parametros, en los ejemplos les dejo como se utiliza, ah hace falta aclarar que el metodo devuelve "-1" si es menor, 1 si es mayor y 0 si son iguales...


Código
....
string str1="hola";
string str2="holander";
int resultado= str1.compare(str2); // va a devolver un -1 porque str1 es menor que la 2
if (resultado == 0 )
 cout<<"son iguales"<<endl;
else if (resultado < 0)
 cout<<"str1 es menor que str2"<<endl;
else cout<<"str1 es mayor que str2"<<endl;
...
 

Código
...
string str3="amo michigan";
string str4="alto michi";
int resultado= str4.compare(5,5,str3,4,5); //compara desde la pos 5 hasta 5 caracteres con str3
//desde la posicion 4 hasta 5 caracteres, en este caso son iguales
if (resultado == 0 )
 cout<<"son iguales"<<endl;
else if (resultado < 0)
 cout<<"str4 es menor que str4"<<endl;
else cout<<"str3 es mayor que str4"<<endl;
..
 

me faltan dos mas que son mezcalndo un poco esto pero una de ellas seria mas o menos asi,  str1.compare(0, str1.size(), str2) lo que hace ese comparar la cadena 1 en su totalidad con la cadena 2



Bueno Hasta aca llegue por el dia de hoy, mas adelante voy a poner mas material, hasta ahora nos estaria faltando, metodos para buscar cadenas, caracteristicas de la clase string, sustitucion de caracteres, iteradores, etc...
« Última modificación: 30/10/2006, 22:50:44 por Ge0Ks » En línea




Gracias Mari -- germanb@hotdesign.com.ar --
                  -- germanazo@papadedios.com.ar --
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #4 en: 24/03/2009, 00:00:09 »

http://www.clubdesarrolladores.com/articulos/mostrar/70-cpp-string-class-clase-cpp-para-cadenas-de-caracteres
En línea

Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: