Manejo de Cadena de Caracteres

Anuncio
Manejo de Cadena de Caracteres
Preparado por: J. Huircan
Departamento de Ingeniería Eléctrica
Universidad de La Frontera
2012
Introducción
Las cadenas de caracteres son arreglos unidimensionales usados en C. Estos permiten generar mensajes en
modo texto usando el código ASCII. Sin embargo, los caracteres a bajo nivel siguen siendo tratados como
bytes. El lenguaje C provee una biblioteca para el manejo de las cadenas cuyas funciones están declaradas
en el archivo de cabecera string.h.
string.h
Cadena
Las cadenas de caracteres (string) son arreglos que se componen de caracteres alfanuméricos. El final de
una cadena se indica con un caracter especial, éste es un byte compuesto por 8 ceros binarios, es decir
0x00.
void main() {
char cad[10];
}
El tamaño de la cadena debe ser lo suficientemente grande para contener dicho caracter inclusive. Una
cadena declarada como cad[10], podrá contener como máximo 9 caracteres, el último será ocupado por
0x00.
El archivo de cabecera string.h proporciona una serie de funciones que permiten el manejo de cadenas de
caracteres. No existen operadores que permitan comparar cadenas o copiar una cadena en otra, por lo que
se debe hacer uso de las funciones definidas en string.h.
string.h
Función
strcpy
strcmp
strlen
strncpy
Descripción
Copia una cadena en otra cadena
Compara dos cadenas
Determina el largo de una cadena
Copia n caracteres de una cadena a otra
La función strcpy es una contracción de la operación string
copy
py. El uso de estas funciones requiere de un
str
buen manejo de punteros.
Por otro lado, dado que la cadena se define como tipo char, es importante hacer la diferencia por ejemplo
entre 'A' y "A", el primero es el caracter A que se codifica en un byte (0x41) y el segundo elemento es una
cadena que contiene un caracter A y ocupa dos bytes (0x41, 0x00), el carácter y el fin de cadena.
Dado que el final de la cadena contiene el carácter 0x00, si se quiere borrar la cadena, se puede asignar al
primer elemento de la cadena dicho carácter cad[0]=0x00.
Si se define char cad[10], entonces los elemento se individualizan de acuerdo a la Fig.1.
Manejo de cadena de caracteres
Protocolos de Comunicación 2012
¿?
¿?
¿?
¿?
¿?
¿?
¿?
¿?
¿?
¿?
Cad[0]
Cad[1]
Cad[2]
Cad[3]
Cad[4]
Cad[5]
Cad[6]
Cad[7]
Cad[8]
Cad[9]
¿?
Donde cad[0] es el primer elemento de la cadena y cad[9] el último. El siguiente código define la cadena y la
inicializa. El primer ejemplo inicializa caracter a caracter.
void main()
{
char cad[10];
cad[0]=0x00; // borra cadena
cad[0]=’H’;
cad[1]=’O’;
cad[2]=’L’;
cad[3]=’A’;
cad[4]=0x00; // fin de cadena
}
El siguiente ejemplo usa la función strcpy.
#include <string.h>
void main()
{
char cad[10];
strcpy(cad[0], “HOLA”);
}
0x48
0x4f
0x4c
0x41 0x00
Cad[0]
Cad[1]
Cad[2]
Cad[3]
Cad[4]
¿¿
¿¿
¿¿
¿¿
¿¿
Cad[5]
Cad[6]
Cad[7]
Cad[8]
Cad[9]
¿¿
O
H
O
L
A
0x00
¿¿
¿¿
¿¿
¿¿
¿¿
Cad[0]
Cad[1]
Cad[2]
Cad[3]
Cad[4]
Cad[5]
Cad[6]
Cad[7]
Cad[8]
Cad[9]
¿¿
El siguiente ejemplo es realiza traspaso entre dos cadenas y finalmente la imprime en pantalla.
#include <stdio.h>
#include <string.h>
void main()
{
char cad[10], buf[10];
strcpy(cad, "HOLA");
strcpy(buf, cad);
/* Copia en Cad la cadena "HOLA" */
/* Pasa el contenido de cad a buf */
if (!strcmp(buf,cad)) printf("SON IGUALES!");
}
La función strcmp permite comparar dos cadenas de caracteres. Esta comparación se realiza hasta el
caracter 0x00 de final de cadena.
Manejo de cadena de caracteres
Protocolos de Comunicación 2012
Variantes del uso de cadenas
Debido a que el uso de punteros es fundamental es importante establecer su uso en el manejo de cadenas. En las
implementaciones de C la variable puntero se especifica mediante el tipo *identificador luego se tiene y la
asignación de la dirección se hace mediante el operador &. De esta forma se tiene
#include <string.h>
void main()
{
char cad[10], buf[10]; /* cadenas de caracteres */
char *p;
/* puntero a char */
p=&cad[0];
p=cad;
/* Asigna la direccion del elemento 0 */
/* Idem */
strcpy(cad,”HOLA”);
strcpy(cad[0],”HOLA”);
strcpy(&cad[0],”HOLA”);
/* son lo mismo */
strcpy(p,”HOLA”); /* Idem
strcpy(buf[0],p); /*
debido a que el argumento de strcpy es un puntero */
*/
}
void main()
{
char cad[10], buf[10]; /* cadenas de caracteres */
strcpy(cad,”HOLA”);
strcpy(buf[0],cad[2]);
/* inicializando cad */
/* copiando parte de cad en buf */
}
void main()
{
char cad[10]={“HOLA”}; /* Declarando e iniicalizando */
strcpy(buf,cad);
/* copiando de cad en buf */
}
Caracteres especiales
A parte de los caracteres alfanuméricos, es posible el uso de caracteres especiales los cuales son usados por
el código ASCII para tareas especiales. Debido a que la cadena es un arreglo de caracteres, los caracteres
especiales pueden formar parte de la cadena y pueden ser interpretados de acuerdo a ciertas normas
definidas por el usuario.
Tabla 2
C aracter
ara cter
‘\r’
‘\n’
‘ ’
Manejo de cadena de caracteres
HEXA
0x0d
0x0A
0x1B
DEC
13
10
27
Nombre
CR
LF
ESC
Protocolos de Comunicación 2012
Al ser inicializado como carácter puede usarse el código directo. En una cadena se usaran como “\x0d”, “\x0a”
#include <string.h>
void main(){
char cad[10] ={“hola\xd\xa\x0”};
char buf[10];
strcpy(buf,“hola\xd\xa\x0”);
}
Referencias
[1] Leblanc, G. TurboC para IBM-PC y compatibles
Manejo de cadena de caracteres
Protocolos de Comunicación 2012
Descargar