[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