Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez Introducción: C++ y su lenguaje padre( C) no tiene datos predefinidos tipo cadena ( string) , en su lugar C++ como C manipulan cadenas mediante arrays de caracteres que terminan con el carácter nulo(/0). Una cadena se considera como un arrray unimensional de tipo char o unsigned char. Concepto de Cadena :Una cadena es un tipo de dato compuesto .Un array de caracteres (char),terminado por un carácter nulo(/0),NULL. Una cadena (también llamada constante de cadena o literal de cadena) es “ABC”, Cuando la cadena aparece dentro de un programa se verá como si se almacenara cuatro elementos: ¨A´,¨B´,¨C´, y ¨/0´,en consecuencia se considera la cadena como un array de 4 elementos de tipo char , el valor real de esta cadena es la dirección de su primer carácter su tipo es un puntero a char. Aplicando el operador * a un objeto de tipo se obtiene el carácter que forma su contenido; es posible también utilizar aritmética de direcciones con cadenas. *”ABC es igual a 'A' *(”ABC + 1) es igual a 'B' *(”ABC + 2) es igual a 'C' *(”ABC + 3) es igual a '\0' De igual forma utilizando el sub índice del array se puede escribir: “ABC” “ABC” “ABC” “ABC” [0] [1] [2] [3] es es es es L igual igual igual igual A a a a a 'A' 'B' 'C' '\0' c a d e n a d e t e S t e t e S t Array de Caracteres. L A c a d e n a d \0 Cadena de Caracteres Ejemplos : 1 – char cad[] = “Mackoy”; Cad tiene siete caractreres : 'M´,'a´,'c´,'k´,'o´,y´ 2 – cout <<cad; Elaborado por el Lic. Jose Ramon Vilchez Página 1 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez El sistema copiara caracteres de cad a cout hasta que el carácter NULL, '\0' se encuentre. Las funciones declaradas en el archivo de cabecera<string> se utilizan para manipular cadenas. #include<string>. Declaración de variables de cadena: Las cadenas se declaran como los restantes tipos de arrays.El operador postfijo [ ] contiene el tamaño máximo del objeto. El tipo base, naturalmente es char o bien unsigned char: char texto[80]; // Una línea de caracteres de texto char orden[40]; // cadena utilizada para recibir una orden del teclado unsigned char datos; //Activación de bit de orden alto El tipo unsigned char puede ser de interés en aquellos casos en que los caracteres especiales presentes puedan tener el bit de orden alto activado. Si el carácter se considera con signo, el bit de mayor peso(orden alto)se interpreta como bit de signo y se puede propagar a la posición de mayor orden (peso) del nuevo tipo. Para definir un array de caracteres que contenga la cadena “ABCDEF” Escriba char una cadena[7]; Observe que el tamaño de la cadena debe de incluir el carácter '\0' Inicialización de variables de cadena: Todos los tipos de arrays requieren una inicialización que consiste en una lista de valores separados por comas y encerrados entre llaves. char texto[81] = ”Esto es una cadena”; char textodemo[255] = ”Esto es una cadena muy larga”; char cadenatest [] = ”Cual es la longitud de esta cadena”; Las cadenas texto y textodemo pueden contener 80 y 254 caracteres respectivamente, mas el carácter nulo. La tercera cadena cadenatest se declara con una especificación de tipo incompleta y se completa solo con el inicializador .Dado que en el literal hay 36 carácter y el compilador añade el carácter '\0' un total de 37 caracteres se asignaran a cadenatest Elaborado por el Lic. Jose Ramon Vilchez Página 2 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez Ejemplos de cadenas Ejemplo 1 #include <cstdlib> #include <iostream> #include <cstring> using namespace std; int main() { char s[] = "ABCD"; for (int i=0;i<5;i++) cout<<"s["<<i<<"]="<<s[i]<<"\n"; system("PAUSE"); } Ejemplo2 #include <cstdlib> #include <iostream> #include <cstring> using namespace std; int main() { char nombre[] ="!hola Mundo¡"; for (int i=0;i<12;i++) cout<<"nombre["<<i<<"]="<<""<<nombre[i]<<"\n"; system("PAUSE"); } Elaborado por el Lic. Jose Ramon Vilchez Página 3 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez Lectura de caracteres Objetivos: 1 - Los alumnos aprenderán a construir cadenas de caracteres 2 - Los alumnos Aprenderán a utilizar las funciones miembro cin, cin.get, cout.put, cin.putback, cin.ignore Funciones miembros cin: Función cin : El objeto cin del flujo de entrada incluye las funciones de entrada cin.getline(),cin.get(),cin.putback,y cin.peek. Cada uno de estos nombres de funciones incluyen el prefijo “cin”. Cin es un objeto de la clase istream y getline() es una función miembro de la clase iostream; en consecuencia cin puede llamar a getline() para leer una línea completa incluyendo cualquier espacio en blanco. La sintaxis de la función getline() es : Cin.getline(<var_cad>,<max_long_cadena+2>,<'separador'>); La función getline() utiliza 3 argumentos. El primer argumento es el identificador de la variable cadena(nombre de la cadena), el segundo argumento es la log. Máxima de cadena(el número máximo de caracteres que se leerán), que debe de ser al menos 2 caracteres mayor que la cadena real, para permitir el carácter nulo '\0' y el '\n.Por último, el carácter separador se lee y almacena como al siguiente al último carácter de la cadena. La función getline() inserta automáticamente el carácter nulo como el ultimo carácter de la cadena. Ejemplo función cin #include <iostream> #include <string> using namespace std; int main() { float i,n,f; cout<<"Ingrese un número"<<endl; cin>>n; if(n<0) { cout<<"Como se calcula el factorial de un numero negativo?"; } else Elaborado por el Lic. Jose Ramon Vilchez Página 4 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez { f=1; for(i=1;i<=n;i++) { f=f*i; } cout<<"El Resultado es :"<<f<<"\n"; system("pause"); } } Ejemplo función cin.getline() #include <iostream> #include <string> using namespace std; int main() { char s1[15]; char s2[15]; cout << "Ingrese su primer Nombre: "; cin >> s1; //cin.getline(s1,15); cout << "Ingrese su segundo Nombre: "; //cin.getline(s2,15); cin >> s2; cout <<"Su Nombre Completo es :"<<s1<<" "<<s2<<""<< endl; system("pause"); return 0; } Elaborado por el Lic. Jose Ramon Vilchez Página 5 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez Función cin.get Se utiliza para leer carácter a carácter.La llamada cin.get(car) copia el carácter siguiente del flujo de entrada cin en la variable car y devuelve 1 , a menos que se detecte el final del archivo, en cuyo caso se devuelve 0. Ejemplo #include<iostream> using namespace std; int main() { char str[500]; cout << "Introduce una frase: "; cin.getline(str, 500, '\n'); cout << "Tu frase es: " << str; cin.get(); system("pause"); } Función cout.put La funcion opuesta de get es put. La funcion cin.put se utiliza para escribir en el flujo de salida cout caracter a caracter Ejemplo #include <iostream> using namespace std; int main() { char l = 'l'; unsigned char a = 'a'; cout.put('H').put('o').put(l).put(a) << endl; system("pause"); } Elaborado por el Lic. Jose Ramon Vilchez Página 6 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez Funcion cin.putback La funcion cin.putback restaura el ultimo caracter leido por cin.get() de nuevo al flujo de entrada cin #include <iostream> #include <string> int main () { std::cout << "Ingrese un numero o una palabra: "; char c = std::cin.get(); if ( (c >= '0') && (c <= '9') ) { int n; std::cin.putback (c); std::cin >> n; std::cout << "Usted ingreso el Numero: " << n << '\n'; } else { std::string str; std::cin.putback (c); getline (std::cin,str); std::cout << "Usted Ingreso la Palabra: " << str << '\n'; } system("pause"); return 0; } Funcion cin.ignore La función cin.ignore lee uno o mas caracteres del flujo de entrada cin sin procesar. #include <iostream> int main () { char first, last; std::cout << "Ingrese su primer nombre seguido de su segundo nombre: "; first = std::cin.get(); std::cin.ignore(256,' '); last = std::cin.get(); std::cout << "sus iniciales son : " << first << last << '\n'; system("pause"); return 0; } Elaborado por el Lic. Jose Ramon Vilchez Página 7 Universidad de Ciencias comerciales U.C.C PROGRAMACION II Unidad II: Cadenas y Caracteres en C++ Docente : Lic. José Ramón Vilchez Funcion cin.peek #include <iostream> #include <string> int main () { std::cout << "Ingrese un Numero o una palabra "; char c = std::cin.peek(); if ( (c >= '0') && (c <= '9') ) { int n; std::cin >> n; std::cout << "Usted ingreso el Numero: " << n << '\n'; } else { std::string str; std::getline (std::cin, str); std::cout << "Usted ingreso la palabra: " << str << '\n'; } system("pause"); return 0; } Elaborado por el Lic. Jose Ramon Vilchez Página 8