Вы находитесь на странице: 1из 5

Clase string en C++

El ANSI proporciona una clase string que evita muchos problemas asociados a vectores
de caracteres simples (char* o char[]). Se puede definir un objeto de la clase string de
una forma muy simple, tal y como se muestra en este ejemplo:

#include <string>
using namespace std;
...
string first_name = "Bjarne";
string last_name;

last_name = "Stroustrup";

string names = first_name + " " + last_name;


cout << names << endl;

names = last_name + ", " + first_name;


cout << names << endl;

Funciones miembro

La clase string tiene muchas funciones miembro. Algunas funciones básicas se


describen a continuación
Importante: el tipo size_type se puede considerar como int

Un objeto string se puede definir sin un valor de inicialización, en


ese caso su valor inicial es una cadena vacía (longitud cero, ningún
carácter):
string str1;

Un objeto de la clase string se puede también inicializar con

• una expresión string:

string str2 = str1; string str3 = str1 + str2;


Inicialización string str4 (str2); // forma alternativa a string
(constructor) str4 = str2;

• una cadena de caracteres constante:

string str4 = "hola allí";


string str5 ("adiós"); // forma alternativa a string
str5 = "adiós";

• un único carácter
Desafortunadamente, los métodos previstos no funcionan:
string str6 = ' A'; // incorrecto
string str7 ('A'); // también incorrecto

• En su lugar, debemos utilizar una forma especial con dos


valores:

string str7 (1, 'A'); // correcto

Los dos valores son: la longitud deseada de la cadena y un


carácter para llenar la cadena. En este caso, estamos pidiendo
una cadena de longitud uno, rellenada con el carácter A .

• una subcadena de otro objeto string:

string str8 = "ABCDEFGHIJKL", str9(str8, 2, 9);


size_type length() const;
size_type size() const;

Ambas funciones devuelven la longitud (número de caracteres) del


length string. El tipo devuelto size_type es un tipo entero sin signo. (el
nombre del tipo generalmente debe tener el nombre de la clase con el
size operador de alcance, como en string::size_type .)
string str = "hola";
string::size_type len;
len = str.length(); // len == 4
len = str.size(); // len == 4
const char * c_str();

Se utiliza para poder compatibilizar el nuevo tipo de dato con el


c_str antiguo char *
string filename; cout << "introduce nombre del archivo:
"; cin >> filename; ofstream outfile
(filename.c_str()); outfile << "datos" << endl;
string::pos insert(string::size_type pos, const string&
s);
Inserta un string s en el objeto string actual, comenzando en la
posición pos especificada.
insert string str11 = "abcdefghi";
string str12 = "0123";
str11.insert (3, str12);
cout << str11 << endl; // "abc0123defghi"
str12.insert (1, "xyz");
cout << str12 << endl; //"0xyz123"
string::pos erase(string::size_type pos, size_type n);
Suprime una subcadena de longitud n del string actual a partir del
erase carácter de la posición pos .
string str13 = "abcdefghi"; str13.erase (5,3); cout <<
str13 << endl; //"abcdei"
string::pos replace(size_type pos, size_type n, const
string &s);
replace Suprime la subcadena que empieza en el carácter de la posición pos del
string actual y con longitud n, y la substituye por la cadena s
string str14 = "abcdefghi"; string str15 = "XYZ";
str14.replace (4,2,str15);
cout << str14 << endl; // "abcdXYZghi"
size_type (const string &str, size_type posicion);
Busca la primera ocurrencia de str en la cadena actual, comenzando
en la posición posicion. Si se encuentra, devuelva la posición del
primer carácter. Si no, devuelve un valor especial (llamado
find string::npos ). El rfind hace lo mismo, pero devuelve la posición de
la ocurrencia de la última vez que aparece la cadena especificada.
rfind string str16 = "abcdefghi"; string str17 = "def";
string::size_type posicion = str16.find (str17,0); cout
<< posicion << endl;
posicion = str16.find ("AB", 0);
if (posicion == string::npos)
cout << "no encontrado" << endl;
string substr(size_type pos, size_type n);
Devuelve una subcadena del string actual, comenzando en la posición
substr pos y teniendo una longitud de n :
string str18 = "abcdefghi";
str19 = str18.substr (6, 2);
cout << str19 << endl; //"gh"

Funciones no miembro

Además de las funciones miembro de la clase string, algunas funciones no miembro se diseñaron para
trabajar con los strings; el más común de éstos es:

istream& getline(istream& es, string& str, char delim ='\n');


Lee caracteres de un flujo de entradas en una string, parando cuando sucede
una de las cosas siguientes:

• Una condición end-of-file ocurre en el flujo de entradas


• Cuando el número máximo de los caracteres que pueden caber en una
string se ha leído
• Cuando se encuentre el delimitador indicado por delim

El valor de vuelta es una referencia al flujo de entradas. Si la corriente se


prueba como valor lógico (como en si o mientras que ), es equivalente
verdad si se ha leído correctamente y falso en otro caso (e.g., fin del archivo).
getline
El uso más común de esta función es usarla "línea por la línea" para leer un
archivo. Recuerde que el operador de extracción (>>) para cuando encuentra
un delimitador cualquiera (como espacio en blanco o tabuladores), no
necesariamente el extremo de una linea de entrada. La función getline puede
leer líneas del texto conteniendo espacios en blanco.

vector<string> vec1;
string linea;
vec1.clear();
ifstream infile ("stlìn.txt");
while (getline(infile, línea)) {
vec1.push_back (línea);
}

También se puede utilizar para leer una línea completa desde la


entrada estándar:

getline(cin, línea, '\n')

Operadores

Un número de operadores de C++ también se pueden usar con los objetos string:

El operador de asignación se puede utilizar de varias maneras:

• Asignando una cadena a otra

string cadena1= "hola"; string cadena2; cadena2 =


cadena1

= • Asignando una cadena constante

string cadena3; cadena3 = "adiós";

• Asignando un carácter

string cadena4; char ch = 'A'; cadena4 = ch;


cadena4 = 'Z';

+ es el operador de concatenación:

• dos objetos string

string str1 = "hola"; string str2 = "allí";


string str3 = str1 + str2; //"hola allí"
+
• un objeto string y una secuencia de caracteres constante

string str1 = "hola"; string str4 = str1 + "allí";

• un objeto cadena y un único carácter

str5 = "el extremo"; string str6 = str5 + '!';

"+ =" el operador combina las operaciones anteriores de asignación y de


concatenación
+=
secuencia str1 = "hola";
str1 + = "allí";
== Los operadores de comparación devuelven un valor boleano (true/false)
!= que indica si la relación especificada se verifica entre los dos operandos.
<
> Los operandos pueden ser:
<=
>= • dos objetos string
• un objeto string y una secuencia de caracteres constante.

El operador de inserción envía el valor de un objeto string a un flujo


de salida (e.g., cout ).
<<
secuencia str1 = "hola allí";
cout << str1 << endl;

El operador de extracción lee una cadena de caracteres de un flujo de


entrada y asigna el valor a un objeto string.
>>
secuencia str1;
cin >> str1;

El operador del subíndice tiene acceso a un carácter en una secuencia.


Muy importante: No se pude utilizar para añadir caracteres al string,
[]
sólo para consultar el valor de un carácter o para modificarlo:
string str10 = "abcdefghi";
(subíndice) char ch = str10[3 ];
cout << ch << endl; // ' d '
str10[5] = ' X';
cout << str10 << endl; "abcdeXghi"

Вам также может понравиться