Cadenas y Estructuras Cadenas de caracteres (I) Vectores de tipo carácter (char) con un tratamiento especial. El último elemento útil del vector debe ser el carácter nulo (código ASCII 0) ’\ 0’ Cadena de N caracteres declarar un vector con N+ 1 elementos. Ejemplo: char cadena[ 6]; reserva suficiente espacio para almacenar una cadena de hasta 5 caracteres. Definición de constantes mediante comillas: Cadenas de caracteres (II) Consulta: igual que en los vectores Asignación, diferentes maneras: char cadena[ 10]; ... cadena[ 0] = ’c’; cadena[ 1] = ’a’; cadena[ 2] = ’s’; cadena[ 3] = ’c’; cadena[ 4] = ’o’; cadena[ 5] = ’\ 0’; char nombre[ 10] = {’N’, ’U’, ’R’, ’I’, ’A’, ’\ 0’}; char nombre[ 10] = "NURIA"; char nombre[ ] = "NURIA"; Cadenas de caracteres (III) Funciones de manipulación en string.h: strlen: longitud de una cadena, strcpy: copiar una cadena en otra, strcat: concatenar dos cadenas, strcmp: comparar dos cadenas, etc. Entrada y salida (stdio.h): Formato especial %s para scanf (limitado) y printf. Para solucionar utilizar scanf(“%s[^\n]”, var); permite aceptar todos los caracteres excepto \n que finaliza la lectura. Funciones gets y puts. Cadenas de caracteres (IV) //Leer dos cadenas, concatenarlas, convertir minúsculas en mayúsculas y viceversa: #include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h> int main () { char cad1[ 80], cad2[ 80], cad3[ 160]; int i; printf("\ nCadena 1: "); gets( cad1); printf("\ nCadena 2: "); gets( cad2); /* cad3 = cad1 + cad2 */ strcpy( cad3, cad1); strcat( cad3, cad2); i = 0; while (cad3[ i] != '\0') { if (( cad3[ i]>='a') && (cad3[ i]<='z')) cad3[ i]= toupper(cad3[i]); /* Convierte en mayúscula */ else if (( cad3[ i]>= 'A') && (cad3[ i]<= 'Z')) cad3[ i]= tolower(cad3[i]); /* Convierte en minúscula */ i++; } printf(" La cadena resultante es: %s\n", cad3); } Estructuras (I) Agrupación de elementos de distintos tipos de datos Definición (plantilla genérica). No reserva memoria: struct nombre_ estructura { tipo_ campo_ 1 nombre_ campo_ 1; tipo_ campo_ 2 nombre_ campo_ 2; ... tipo_ campo_ N nombre_ campo_ N; }; Ejemplo: struct cliente { char nombre[ 100]; long int dni; char domicilio[ 200]; long int num_ cuenta; float saldo; } Estructuras (II)- Declaración y acceso Declaración posterior a la definición: struct nombre_ estructura { tipo_ campo_ 1 nombre_ campo_ 1; tipo_ campo_ 2 nombre_ campo_ 2; ... tipo_ campo_ N nombre_ campo_ N; } lista_ de_ variables; struct cliente { char nombre[ 100]; long int dni; char domicilio[ 200]; long int num_ cuenta; float saldo; } cli1, cli2; Declaración de variables en la propia definición: struct nombre_ estructura lista_ de_ variables; struct cliente cli1, cli2; Acceso a los campos: variable. nombre_ campo cli1. nombre cli1. dni cli2. saldo Estructura (III) - Asignación Asignación campo a campo: strcpy( cli2. nombre, "Federico Sancho Bruch"); cli2. dni = 23347098; gets( cli2. domicilio); scanf("% ld", &cli2. num_cuenta); cli2. saldo += 10000. 0; Asignación completa en la declaración: struct cliente cli2 { "Federico Sancho Buch", 23347098, "Rue del Percebe 13 . Madrid", 7897894, 1023459. 34 }; Copia de variables estructura mediante asignación: cli2 = cli1;