Cadenas de caracteres

Anuncio
Cadenas de caracteres
Cadenas de caracteres
Las cadenas de caracteres (también llamadas cadenas o strings) son un tipo
particular de vectores (de hecho son vectores de tipo char), con la particularidad
de que tienen una marca de fin (el carácter ‘\0’).
Estructura de una cadena:
char <identificador>[longitud_máxima];
Algunos ejemplos:
char nombre[]=”Hola”;
char nombre2[]={‘H’,’o’,’l’,’a’,’\0’}; //Esta manera es igual a la anterior
char vector[]={‘H’,’o’,’l’,’a’};
char cadena[100]=”Esto es una cadena en c”;
char vacia[]=””;
Al declarar un vector se define la cantidad de elementos que puede contener, en el
caso de las cadenas se debe tener en cuenta el espacio adicional necesario para
el carácter ‘\0’. En los ejemplos, tanto la cadena “nombre” como “nombre2” tienen
un largo de 5, y “vacia” tiene un largo de 1.
Leyendo cadenas de caracteres desde teclado
Para asignar la entrada estándar a una cadena se puede usar la función scanf con
la opción %s (cadenas sin espacios) o también %[^\n] (cadenas con espacios
hasta el fin de línea).
Ejemplo:
int main()
{
char nombres[30], apellido[15];
printf(“Ingrese sus nombres: “);
scanf(“%[^\n]”, nombres); //Lee caracteres hasta el fin de línea
printf(“Ingrese su apellido: “);
scanf(“%s”, apellido); //Lee caracteres hasta el primer espacio
printf(“Usted es: %s %s”, nombres, apellido);
}
Nótese que no se requiere utilizar el operador & en el scanf para el argumento, ya
que el nombre del arreglo es un apuntador estático al arreglo.
El %s puede delimitar los caracteres a considerar como máximos a tomar para
almacenar en una cadena. Por ejemplo, %24s indica que 24 es la máxima
cantidad de caracteres que esperamos que ingresen. Si se intenta ingresar más
de 24 sencillamente no se almacenarán. Esta es una buena costumbre cada vez
que se utiliza scanf para capturar cadenas.
Ejemplo:
int main()
{
char nombre[25];
printf(“Ingrese su nombre: ”);
scanf(“%24s”, nombre);
printf(“Su nombre es: %s”, nombre);
}
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 nombres[40], apellidos[40], completo[80];
nombres=”Maria Jose”; //Asignaciones ilegales
apellidos=”Bautista Saavedra”;
completo=nombres+apellidos; //Operación ilegal
}
Manejo de cadenas en C
Para trabajar con cadenas de caracteres, es necesaria la utilización de la librería
<string.h>, que contiene la definición de macros, constantes, funciones y tipos de
utilidad para trabajar con cadenas de caracteres.
Las funciones declaradas en <string.h> funcionan en cualquier plataforma que
soporte ANSI C. Sin embargo, existen algunos problemas de seguridad con estas
funciones, como el desbordamiento (overflow) de arreglos, que hacen que algunos
programadores prefieran opciones más seguras frente a la portabilidad que estas
funciones ofrecen. Además, las funciones para cadenas de caracteres sólo
trabajan con conjuntos de caracteres ASCII o extensiones ASCII compatibles.
Funciones más conocidas:
Nombre
strcat()
Ejemplo
strcat(a,b)
strlen()
strlen(s)
Descripción
Añade la cadena “b” al final de la “a”. Devuelve la cadena
“a”.
Devuelve la longitud de la cadena “s”.
Copia en la cadena “b” lo que se encuentra en la cadena
“a”.
strcmp() strcmp(a,b) Compara la cadena “a” con la cadena “b” y devuelve un
número mayor, igual, o menor a cero de acuerdo a los
siguientes casos:
1.- Si strcmp(a,b)>0, “a” es mayor que “b”.
2.- Si strcmp(a,b)<0, “b” es mayor que “a”.
3.- Si strcmp(a,b)==0, “a” es igual que “b”.
strcpy()
srtcpy(b,a)
ASCII
ASCII (American Standard Code for Information Interchange – Código Estándar
Estadounidense para el Intercambio de Información), es un código de caracteres
basado en el alfabeto latino, tal como se usa en inglés moderno. Fue creado en
1963 por el Comité Estadounidense de Estándares (ASA, conocido desde 1969
como el Instituto Estadounidense de Estándares Nacionales, o ANSI) como una
evolución de los conjuntos de códigos utilizados entonces en telegrafía. Más tarde,
en 1967, se incluyeron las minúsculas, y se redefinieron algunos códigos de
control para formar el código conocido como US-ASCII.
El código ASCII utiliza 7 bits para representar los caracteres, aunque inicialmente
empleaba un bit adicional (bit de paridad) que se usaba para detectar errores de
transmisión.
ASCII fue publicado como estándar por primera vez en 1967 y fue actualizado por
última vez en 1986. En la actualidad define códigos para 32 caracteres no
imprimibles, de los cuales la mayoría son caracteres de control que tienen efecto
sobre cómo se procesa el texto, más otros 95 caracteres imprimibles que les
siguen en la numeración (empezando por el carácter “espacio”).
Casi todos los sistemas informáticos actuales utilizan el código ASCII o una
extensión compatible para representar textos y para el control de dispositivos que
manejan texto como el teclado.
Las computadoras solamente entienden números. El código ASCII es una
representación numérica de un carácter como ‘a’ o ‘@’.
Como otros códigos de formato de representación de caracteres, el ASCII es un
método para una correspondencia entre cadenas de bits y una serie de símbolos
(alfanuméricos y otros), permitiendo de esta forma la comunicación entre
dispositivos digitales así como su procesado y almacenamiento. El código de
caracteres ASCII, o una extensión compatible, se usa en casi todos los
ordenadores, especialmente con ordenadores personales y estaciones de trabajo.
El nombre más apropiado para este código de caracteres es US-ASCII.
A modo de resumen, en el código ASCII a cada carácter le corresponde un
número. Veamos el siguiente ejemplo:
int main()
{
Char a=’A’;
printf(“Su equivalente numerico es: %d”, a)
}
El programa mostrará por pantalla el número 65 (ver tabla) ya que ese es su
equivalente según el código ASCII.
Ejemplos
1.- Escriba un algoritmo en C que dada una cadena de caracteres, determine su
largo (cantidad de caracteres que posee).
a) Sin usar las funciones de la librería <string.h>
int largo_cadena(char cadena[]) //Corresponde a una función
{
int largo=0;
while(cadena[largo]!=’\0’)
{
largo++;
}
return largo;
}
b) Usando las funciones de la librería <string.h>
int main()
{
char vector[]=”Hola a todos”;
int largo;
largo=strlen(vector);
printf(“El largo de la cadena es: %d”, largo);
}
Descargar