Está en la página 1de 6

UNIVERSIDAD MILITAR NUEVA GRANADA

DEPARTAMENTO DE TECNOLOGÍAS DEL CONOCIMIENTO


MANUAL DE PROGRAMACIÓN II EN C++

8. CADENAS DE CARACTERES EN C++:

El lenguaje C++, tiene la clase string, que es un tipo de dato superior al utilizado por el
lenguaje C. El lenguaje C, maneja las cadenas de caracteres como vectores tipo char; esta
guía, utiliza este estilo, para implementar las diferentes formas de manipularlas.

Al manejar cadenas de caracteres se debe tener en cuenta que estas terminan en un


carácter NULL, es decir \0. Realmente una cadena de caracteres es un arreglo en donde
cada carácter se encuentra posicionado en un elemento del arreglo, se puede hacer
referencia a cada carácter, mediante la posición relativa del mismo en la cadena y/o el
arreglo. El siguiente ejemplo, muestra esta situación.

1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 char palabra[7];
8 cout << "Escriba un Palabra de Maximo 6 Caracteres: ";
9 cin >> palabra;
10 cout << endl;
11 cout << "La Cuarta Letra es: "<<palabra[3];
12 cout << endl << endl;
13 system("pause");
15 return 0;
15 }

En la línea 6 se declara la variable palabra como arreglo de 1 dimensión para 7 elementos.

 Primera observación, porqué se declara de 7 elementos, ¿si en el mensaje de la línea


8 se pide una palabra de máximo 6 caracteres?, recuerde que toda cadena de
caracteres termina en NULL (\0), ahora si se declara como:

char palabra[6];

al terminar la ejecución del programa sale este aviso:

Manual de Programación II - Cadenas de Caracteres Página 1


Es precisamente para evitar este error que el arreglo se debe declarar como de 7
caracteres.

 Segunda observación, no hay necesidad de involucrar el número de caracteres que


recibe el arreglo, en la línea 9, cuando se pide el dato, el compilador asume el tamaño.
¿Qué sucede si se digitan números? ¿Qué pasa si se escriben más caracteres de los
pedidos?
 Tercera observación: en la línea 11, se muestra el cuarto elemento a través de su
posición en el arreglo, veamos cómo se almacena:

c o l o s o \0

8.1. Manejo de cadenas:

Hay una situación especial en el manejo de cadenas y es el hecho que al declarar un arreglo
de tipo char, la instrucción cin, para lectura de datos de este tipo corta la lectura cuando
encuentra un carácter de espacio en blanco, es decir, si se trata de ingresar dos o más
palabras separadas por un espacio, el compilador trunca después de la palabra inicial,
perdiendo el resto. En caso de que la palabra sea mayor que el tamaño del arreglo, asume,
pero emite un mensaje de error similar al mencionado anteriormente.

La solución para evitar este tipo de errores, es utilizar la función getline, su sintaxis es:

cin.getline(nombre_arreglo, tamaño_arreglo);

Manual de Programación II - Cadenas de Caracteres Página 2


 Nombre_arreglo: es el nombre del arreglo que va a contener la cadena.
 Tamaño_del_arreglo: considera el tamaño del vector, tener en cuenta que se debe
dejar un carácter para el NULL.

Si es necesario leer varias cadenas en forma consecutiva, debemos utilizar la instrucción


fflush(stdin) o rewind(stdin); para borrar lo que haya en el buffer del teclado antes de leer la
siguiente cadena.

 Ejemplo: El siguiente programa muestra la diferencia entre la captura con cin y la


captura con cin.getline().

#include <iostream>

using namespace std;

int main()
{
char nombre[30];
cout << "Captura utilizando cin";
cout << endl;
cout << "Digite su nombre: ";
cin >> nombre;
cout << endl;
cout << "Su nombre es: " << nombre;
cout << endl<<endl;
cout << "Captura utilizando cin.getline()";
cout << endl;
//fflush(stdin);
rewind(stdin);
cout << "Digite su nombre otra vez: ";
cin.getline(nombre, 30);
cout << endl;
cout << "Su nombre es: " << nombre;
cout << endl << endl;
system("pause");
return 0;
}

Manual de Programación II - Cadenas de Caracteres Página 3


8.2. Inicialización de vectores tipo char para almacenar cadenas:

Para darle un valor inicial de tipo cadena, existen dos formas:

1. Escribir la cadena entre comillas dobles, sin el ‘\0’, aunque manteniendo el tamaño del
vector.
char cadena[5]=”Hola”;

2. Escribir la cadena entre comillas dobles, sin el ‘\0’, y sin especificar el tamaño para el
vector. El compilador tomará el tamaño, reservando también espacio para el ‘\0’.

char cadena[]=”Hola”;

Aunque la segunda forma es la más práctica, ya que nos evita tener en cuenta la cantidad
de caracteres de la cadena con que estamos inicializando, la primera forma será la más
indicada cuando queramos que el vector tenga un tamaño mayor que el de la cadena
asignada, si, por ejemplo, queremos más adelante en el programa, almacenar una cadena
de más caracteres en el mismo vector.

8.3. Biblioteca “string”:

La biblioteca “string” tiene incluidas una gran cantidad de funciones para manipular
cadenas de caracteres. Para poder utilizarlas debemos de incluir el archivo de cabecera
<string>.

#include <string> Algunos de los compiladores, no requieren incluir este archivo para
realizar dichas funciones. Algunas de las funciones más utilizadas son:

Manual de Programación II - Cadenas de Caracteres Página 4


Función Uso

strlen(<cadena>) Devuelve la longitud de la cadena, sin ‘\0’.


strcpy_s(<destino>,<origen>) Copia el contenido de una cadena en otra.
strcat_s(<cadena1>,<cadena 2>) Concatena cadena 2 al final de cadena 1.
strcmp(<cadena1>,<cadena2>) Compara dos cadenas. Devuelve 0, si son
iguales, sino devuelve un negativo.

 Ejemplo: El siguiente programa, muestra el uso de estas funciones.

#include <iostream>
#include <string>

using namespace std;

int main()
{
char texto1[30], texto2[30];
int resp, comp;
cout << "Digite un texto: ";
cin.getline(texto1, 30);
resp = strlen(texto1);
cout << "\nUso de strlen(), para saber la cantidad de caracteres.\n";
cout << "El texto tiene " << resp << " caracteres.\n";
cout << "\nUso de strcpy(), para copiar el texto1 en el texto2.\n";
strcpy_s(texto2, texto1);
cout << "\nEl texto2 es: " << texto2 << '\n';
cout << "\nUso de strcat(), para concatenar texto1 y texto2.\n";
cout << "Digite texto1: ";
cin.getline(texto1, 30);
cout << "Digite texto2: ";
cin.getline(texto2, 30);
strcat_s(texto1, texto2);
cout << "\ntexto1= " << texto1 << '\n';
cout << "\nUso de strcmp(), para comparar texto1 y texto2.\n";
cout << "Digite texto1: ";
cin.getline(texto1, 30);
cout << "Digite texto2: ";
cin.getline(texto2, 30);
comp = strcmp(texto1, texto2);
if (comp == 0)
{

Manual de Programación II - Cadenas de Caracteres Página 5


cout << "\nLos textos son iguales.\n";
}
else
{
cout << "\nLos textos son diferentes.\n";
}
cout << endl << endl;
system("pause");
return 0;
}

Manual de Programación II - Cadenas de Caracteres Página 6

También podría gustarte