Sunteți pe pagina 1din 2

Everardo Polo Sánchez.

1121
201421258
Ing. Electromecánica.
3.3.3 Cadena.

Las cadenas de caracteres (también llamadas cadenas o strings) son un tipo particular de
vectores, son de hecho vectores de char, con la particularidad que tienen una marca de
fin (el caracter '\0'), además el lenguaje nos permite escribirlas como texto dentro de
comillas dobles. Veamos unos ejemplos de su declaración:

char cadena_hola[]="Hola";
char otro_hola[]={'H','o','l','a','\0'}; // Igual al anterior
char vector[]={'H','o','l','a'}; /* Un vector de 4 elementos,
con los elementos 'H','o','l' y 'a' */
char espacio_cadena[1024]="Una cadena en C";
char cadena_vacia[]="";
Cómo vimos anteriormente 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 \0. Viendo el ejemplo, tanto cadena_hola y otro_hola tienen un largo 5
y cadena_vacia tiene un largo de 1.

También vimos anteriormente que al usar vectores debemos tener en cuenta su largo, y
así es que el largo o cantidad de elemento lo necesitamos en todas las funciones que
definimos usando vectores y lo recibimos como un parámetro más en estas, en el caso de
las cadenas al tener una marca de fin podemos prescindir del largo y procesar una
cadenas hasta llegar a la marca de fin.

Por ejemplo, la siguiente función calcula el largo de una cadena:

/* devuelve la cantidad de caracteres en cadena sin contar el '\0' */


int largo_cadena(char cadena[])
{
int largo=0
while (cadena[largo]!='\0') largo++;
return largo;
}
Se debe tener en cuenta que el largo de una cadena y el largo del vector con la que se
representa son distintos, tanto por como largo_cadena() cuenta el largo de la cadena,
como por espacio_cadena del ejemplo anterior.

Algo bastante usual es necesitar unir dos cadenas, veamos un ejemplo:

bool unir_cadenas(char destino[], char origen[], int largo)


{
int largo_origen = largo_cadena(origen);
int largo_destino = largo_cadena(destino);
if ( largo_origen+largo_destino+1 > largo ) {
Everardo Polo Sánchez.
1121
201421258
Ing. Electromecánica.
return false;
}
for (int i=0; i<largo_origen;i++) {
destino[largo_destino+i] = origen[i];
}
destino[largo_destino+largo_origen]='\0';
return true;
}
...
if ( unir_cadenas(espacio_cadena," que puede crecer hasta 1023
caracteres",1024) ) {
...

S-ar putea să vă placă și