Una cadena de caracteres literal se representa mediante una sucesión de caracteres entre comillas dobles.
En C, una cadena de caracteres se almacenaba en un array de tamaño constante y definido antes de ser utilizado.
Ej.-
char nombre[25];
/* Declara un array de 25 caracteres
Todo array comienza en 0 y en el caso de las cadenas, el último elemento es
reservado para el caracter de fin de cadena simbolizado por: \0
*/reservado para el caracter de fin de cadena simbolizado por: \0
El lenguaje C++ dispone de de la biblioteca estándar string, que proporciona el tipo string para representar cadenas de caracteres de longitud finita.
Para poder utilizar el tipo string hay que incluir la biblioteca <string> y utilizar el espacio de nombres std.
El tipo string nos permite utilizar los operadores relacionales [ == , !=, >, <, >=, <= ] para comparar cadenas. También podemos asignar un valor de tipo string a otra variable tipo string. E inclusive hacer concatenaciones con + y +=.
Ej.-
Si compilamos y ejecutamos el programa del ejemplo e introducimos, por ejemplo: Alberto López el programa sólo mostrará
Hola Alberto
getline
Para leer secuencias de caracteres que contengan espacios, se debe utilizar la función getline en lugar del operador >>. La función getline almacena en una variable tipo string todos los caracteres del buffer de entrada hasta leer el carácter de fin de línea.
Ej.-
En este otro ejemplo, al ejecutar el programa, si introducimos la frase:Ej.-
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string name;
cout<<"Escriba su nombre completo"<<endl;
cin >> name;
cout<<"Hola "<<name<<endl;
return 0;
}
Si compilamos y ejecutamos el programa del ejemplo e introducimos, por ejemplo: Alberto López el programa sólo mostrará
Hola Alberto
getline
Para leer secuencias de caracteres que contengan espacios, se debe utilizar la función getline en lugar del operador >>. La función getline almacena en una variable tipo string todos los caracteres del buffer de entrada hasta leer el carácter de fin de línea.
Ej.-
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string frase;
cout<<"Escriba una frase"<<endl;
getline(cin,frase);
cout<< frase <<endl;
return 0;
}
Con cien cañones por banda ...
La salida será:
Con cien cañones por banda ...
que es lo esperado.
La función getline permite especificar un delimitador de fin de línea, sustituyendo al carácter de fin de línea que utiliza por defecto. Por lo que si queremos que lea caracteres del teclado hasta que encuentre un asterisco, llamaríamos a la función getline de esta manera:
const char finCadena = '*';
.
.
.
getline(cin, frase, finCadena);
.
.
El nuevo delimitador de fin de línea es borrado del buffer pero no se almacena en el objeto string.
Para eliminar los caracteres en blando y fin de línea del buffer de entrada antes de leer la secuencia de caracteres con getline, ulitizaremos el manipulador ws en el flujo cin, que extrae todos los espacios en blanco hasta encontrar algún carácter distinto, por lo que no será posible leer una cadena vacía.
cin >> ws; //elimina los espacios en blanco y el fin de línea
size
El tipo string nos provee de la función size para saber el tamaño de la cadena almacenada.
const string nombre = "Alberto López";
.
.
.
int tamCad = nombre.size(); // Se asigna el valor 13
Se puede acceder a una posición concreta del string, como si de un array de caracteres se tratase.
cout <<"El carácter septimo del nombre es: " << nombre[6] << endl;
Esta sentencia mostraría:
El carácter séptimo del nombre es: o
Como se puede observar, el primer elemento de la cadena es 'A' y su índice es el 0, por lo que el séptimo elemento es la 'o' cuyo índice es el 6.
Cuando accedamos a un elemento concreto de una cadena de caracteres, hay que tener en cuenta que no estemos intentando acceder más allá del tamaño de la cadena almacenada menos uno.
