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> |
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
Inicialización (constructor) | 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
string str5 ("adiós"); // forma alternativa a string str5 = "adiós";
string str7 ('A'); // también incorrecto
|
length
size |
size_type length()
const; size_type size() const; Ambas funciones devuelven la longitud (número de caracteres) del 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 operador de alcance, como en string::size_type .) string str = "hola"; |
c_str | const char * c_str(); Se utiliza para poder compatibilizar el nuevo tipo de dato con el antiguo char * string filename; cout << "introduce nombre del archivo: "; cin >> filename; ofstream outfile (filename.c_str()); outfile << "datos" << endl; |
insert | 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. string str11 = "abcdefghi"; |
erase | string::pos erase(string::size_type pos, size_type
n); Suprime una subcadena de longitud n del string actual a partir del carácter de la posición pos . string str13 = "abcdefghi"; str13.erase (5,3); cout << str13 << endl; //"abcdei" |
replace | string::pos replace(size_type pos, size_type
n, const string &s); 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"; |
find
rfind |
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 string::npos ). El rfind hace lo mismo, pero devuelve la posición de la ocurrencia de la última vez que aparece la cadena especificada. string str16 = "abcdefghi"; string str17 = "def"; |
substr | string substr(size_type pos, size_type n); Devuelve una subcadena del string actual, comenzando en la posición pos y teniendo una longitud de n : string str18 = "abcdefghi"; |
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:
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:
|
+ | + es el operador de concatenación:
|
+= | "+ =" 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:
|
<< | 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; |
[]
(subíndice) |
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"; char ch = str10[3 ]; cout << ch << endl; // ' d ' str10[5] = ' X'; cout << str10 << endl; "abcdeXghi" |