[Utu-emt-prog2-info] clase 6 strings
Federico Kouyoumdjian
fedekp en autistici.org
Jue Jul 28 02:25:41 CEST 2011
fuente: transparencias de Gonzalo Pastor y producción propia
Strings
En C++, una cadena o string se define como un vector de caracteres de
longitud determinada que finaliza con un carácter nulo.
El carácter nulo se especifica como ‘\0’ y se corresponde con el ASCII 0
o la constante NULL.
Por esta razón, para declarar vectores de caracteres es necesario que el
tamaño tenga un carácter más que la cadena más larga que pueda almacenar.
Por ejemplo, si se desea declarar un vector que contenga una cadena de
10 caracteres, se deberá escribir: char Cadena[11];
Inicializar el vector en la declaración:
char Cadena[5]= {“Hola”}; //Al final se almacena el carácter NULL o \0.
Si inicializamos el vector podemos omitir el tamaño del mismo:
char Cadena[ ]= " Hola Mundo" ;
Funciones con cadenas (biblioteca string.h)
Aceptar una cadena por teclado:
Estas funciones aceptan la introducción de caracteres que los almacena
dentro del vector.
Al final almacenan el carácter NULL y no controlan el tamaño del vector.
scanf(“%s”, Cadena);
Se acaba cuando se pulsa ENTER o ESPACIO.
No permite la introducción de varias palabas.
Qué pasa si el código dice Scanf(“%s”,nombre)
Y se ingresa Juan Carlos
gets(Cadena);
Se acaba cuando se pulsa ENTER.
Permite la introducción de varias palabras
- Mostrar por pantalla una cadena:
printf(“%s”, Cadena);
Muestra hasta que encuentra el carácter NULL.
printf(“%s %i\n”,nombre,edad);
Juan 20
Carlos Alberto 16
Ana Claudia 15
printf(“%20s %i\n”,nombre,edad);
Juan 20
Carlos Alberto 16
Ana Claudia 15
printf(“%-20s %i\n”,nombre,edad);
Juan 20
Carlos Alberto 16
Ana Claudia 15
FlushAll
Esta función, de la biblioteca stdio.h, vacía todos los buffers de entrada.
La ejecutamos antes de la función gets para vaciar el buffer de teclado.
A veces ese buffer contiene algún carácter, o el carácter ENTER pulsado
desde la última entrada de datos por teclado, y el sistema operativo lo
toma como entrada de a función gets, que queda ejecutada sin
intervención del usuario.
Asignación
Con string no se puede asignar un dato con el signo de igual (=)
strcpy(c1, c2);
Copia la cadena c2 en la cadena c1.
Ej: a=“Hola”; //No se puede
strcpy(a, “Hola”); //Si se puede
Comparación
Con string no se puede comparar usando el doble igual(==)
int strcmp(c1,c2);
Compara las dos cadenas.
Devuelve 0 si son iguales, <0 si c1 es menor a c2 o >0 si c1 es mayor a c2.
Ej: if (s==“Hola”) //No se puede
if (strcmp(s,”Hola”)==0) //Si se puede
if (!strcmp(s,”Hola”)) //Igual al anterior
Otras funciones
int strlen(c); //Devuelve la cantidad de caracteres que contiene la cadena
strcat(c1, c2); //Concatena c2 al final de la cadena c1.
Ejemplo
¿Cómo declararía un vector de 10 posiciones que contenga nombres de
personas?
char nombres[10][20];
typedef
Permite crear nuevos tipos de datos a partir de otros existentes
sintaxis: typedef tipo_existente tipo_nuevo;
Ejemplo: typedef char string [20];
string nombre[10];
Ejercicios
1.Escriba un programa que lea dos strings e imprima “son iguales” si son
iguales, y “son distintos” si son distintos
2.Escriba un programa que lea dos strings y devuelva el largo de
concatenarlos.
3.Escriba un programa en el que se inicialicen tres strings con ciertos
valores (sin usar la entrada estandar, o sea usando asignación) y se los
imprima en orden alfabético.
4.Escriba un programa que lea una frase que contiene espacios y luego la
imprima en pantalla
5.Cree un tipo de datos para los nombres de países y uno para las
iniciales de una persona
Errores comunes
1.Abnormal program termination , solución: se accedió a memoria no
reservada
2.Unable to create output file , solución: configurar C:\TC en Options
-> Directories
Más información sobre la lista de distribución Utu-emt-prog2-info