UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Cadenas de Carácter A diferencia de otros lenguajes de programación que emplean un tipo denominado cadena string para manipular un conjunto de símbolos, en C++, se debe simular mediante un arreglo de caracteres, en donde la terminación de la cadena se debe indicar con nulo. Un nulo se especifica como '\0'. Por lo anterior, cuando se declare un arreglo de caracteres se debe considerar un carácter adicional a la cadena más larga que se vaya a guardar. Por ejemplo, si se quiere declarar un arreglo cadena que guarde una cadena de diez caracteres, se hará como: char cadena[11]; Se pueden hacer también inicializaciones de arreglos de caracteres en donde automáticamente C++ asigna el caracter nulo al final de la cadena, de la siguiente forma: char nombre_arr[ tam ]="cadena"; Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'': char cadena[5]="hola"; El código anterior es equivalente a: char cadena[5]={'h','o','l','a','\0'}; Para asignar la entrada estándar a una cadena se puede usar la instrucción cin>> que almacenará una cadena hasta que encuentre un espacio, los demás caracteres no serán guardados. Por lo tanto cuando se requiere almacenar una frase que contenga más de una palabra se debe utilizar la instrucción cin.getline(nombre_variable, tamaño_de_la_cadena). Es decir, si se requiere almacenar un apellido (una sola palabra) se utilizará cin>>NOMBRE_VARIABLE; Y para almacenar un nombre completo (nombres y apellidos) se utilizará cin.getline(NOMBRE VARIABLE, TAMAÑO_DE_LA_CADENA). Por supuesto que las variables deben ser vectores de tipo char, puesto que el tipo de dato cadena no existe en el lenguaje C++ Ejemplo: /*Autor: Mirian Benavides - UNAD Programa: Cadenas 1 IDE FALCON */ U3 Página 8 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION //DIRECTIVAS DEL PRE-PROCESADOR #include <iostream> #include <stdlib.h> #include <stdio.h> /*Libreria para utilizar la instrucción fflush(stdin) que permite vaciar o limpiar el buffer del teclado */ using namespace std; int main() //Función principal { char palabra[15], frase[40]; // Declaración de vectores para almacenar cadenas cout<<"REGISTRO DE UNA PALABRA Y UNA FRASE"; cout<<endl <<endl <<"Digite una palabra : "; cin>>palabra; fflush(stdin); //limpiar el buffer cout<<endl <<"Digite una frase : "; cin.getline(frase,40); cout<<endl <<endl <<"INFORMACION REGISTRADA"; cout<<endl <<endl <<"Palabra : " << palabra; cout<<endl <<"Frase : " << frase; cout<<endl <<endl; system("pause"); return 0; } El lenguaje C++ no maneja cadenas de caracteres, como se hace con enteros o flotantes, por lo que lo siguiente no es válido: int main() { char nombre[40], apellidos[40], completo[80]; nombre="José María"; // Ilegal apellidos="Morelos y Pavón"; // Ilegal completo="Gral."+nombre+appellidos; // Ilegal return 0; } Funciones de cadena Existen funciones de carácter y cadena que amplían sus posibilidades de uso, a continuación se explican algunas de ellas. Funciones de Carácter U3 Página 9 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Para trabajarlas es necesario incluir en los programas la librería ctype.h toupper( variable_char ): convierte un caracter a mayúsculas. Ej. 1 char rta = ‘s’; rta = toupper( rta ); // en la variable rta se encuentra ahora el carácter ‘S’ Ej. 2 char x; x = toupper(getche( )); // guarda en la variable x una letra en mayúsculas // digitada por el usuario. Ej. 3 if ( toupper( getche( ) = = ‘S’) // verifica que la letra digitada por el // usuario sea ‘S’. tolower( variable_char) convierte un carácter a minúsculas. Funciones de Cadena Para trabajar con cadenas es necesario utilizar ciertas funciones, que requieren incluir en el programa la libreria: string.h strcpy(cadena1,cadena2): copia en cadena1 el contenido de cadena2. El primer argumento deben ser de tipo array de caracteres, el segundo puede ser un array de caracteres o una expresión encerrada entre comillas dobles. Ej. 1 char t1[20]; strcpy(t1,”HOLA”); Ej. 2 char t2[20], t3[20]=”PASTO”; strcpy(t1,t2); strcat(cadena1, cadena2): se utiliza para unir dos cadenas. El resultado se guarda en la cadena1. Ej. 1 char t1[20]=”HOLA”; strcat(t1,”JUAN”); Ej. 2 char t1[20]=”HOLA”, t2[20]=”MUNDO”; strcat(t1,t2); Si se requiere un espacio, este debe estar incluido en una de las cadenas strcmp(cadena1, cadena2): compara dos cadenas y devuelve el valor 0 si las cadenas son iguales. Si la cadena1 es lexicográficamente mayor que la cadena2, devuelve un valor positivo, de lo contrario será negativo. Como la función devuelve un valor entero, es necesario asignarlo a una variable de ese tipo, y luego evaluarla Ej 1. int rta; rta = strcmp(“HOLA”,”hola”); if (rta= =0) printf(“iguales”); else printf(“diferentes”); U3 Página 10 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Ej. 2 Ej. 3 Ej. 4 U3 int rta; char t1[2]=”a”,t2[2]=”A”; rta = strcmp(t1,t2); if (rta= = 0) printf(“iguales”); else printf(“diferentes”); int rta; char t1[20]=”SISTEMAS”; rta = strcmp(t1,”informatica”); if (rta= = 0) printf(“iguales”); else printf(“diferentes”); char t1[10]: for( ; ; ) { printf(“\ndigite una palabra”); gets(t1); if (¡strcpm(“salir”,t1)) break; } strlen(cadena): devuelve el número de caracteres que tiene la cadena. Ej. 1 int x; x = strlen(“informatica”); E. 2 int x; char t1[10]=”CALI”; x = strlen(t1); Ej. 3 int x; char t1[20] x = strlen(gets(t1)); Página 11