Cadenas de caracteres
Cadena de caracteres o String
• Una cadena de caracteres o string es un arreglo, en el cual
todos sus elementos son de tipo char.
• Una cadena de caracteres puede se inicializada asignándole un
literal.
Por ejemplo:
char cadena[5] = “abcd”;
• Este ejemplo inicializa el string cadena con 5 elementos
(cadena[0] a cadena[4]). El quinto elemento, es el caracter
nulo ( \0 ), con el cual C finaliza todas las cadenas de
caracteres.
Cadena de caracteres o String
• Si la cadena asignada a un string es más larga que el
tamaño especificado del string, se obtiene un error en el
momento de la compilación.
Por ejemplo:
char cadena[3] = “abcd”;
• Este ejemplo daría lugar a un mensaje de error,
indicándonos que hemos excedido los límites del arreglo.
Cadena de caracteres o String
• Si la cadena asignada es más corta que el tamaño del
arreglo de caracteres, el resto de los elementos del
arreglo son inicializados a valor nulo (’\0’)
char cadena[10] = “abcd”;
cadena a b c d \0 \0 \0 \0 \0 \0
0 1 2 3 4 5 6 7 8 9
Cadena de caracteres o String
• Para leer una cadena de caracteres podemos emplear la función scanf().
Por ejemplo:
char cadena[15];
scanf(“%s”, &cadena);
Con el inconveniente que no almacena espacios en blanco contenidos en
la palabra leída.
• La función gets( ), también lee un string y la almacena en la variable
especificada. Y puede almacenar los espacios en blanco existentes en la
palabra leída.
gets(var);
Función gets( )
• La variable var, contiene todos los caracteres tecleados,
excepto el caracter de nueva línea (‘\n’), que es
automáticamente reemplazado por el caracter nulo (‘\0’),
con el cual C finaliza toda cadena de caracteres
• La función gets( ), a diferencia de la función scanf( ),
permite la entrada de una cadena de caracteres formada
por varias palabras separadas por espacios en blanco.
Actividad Grupal
Comparar el uso de scanf( ) y gets( )
para la lectura de strings
Actividad Grupal
int main()
{ char nombre [50];
printf("\n Introduce tu nombre completo:
");
fflush(stdin); // Limpia la memoria
gets(nombre);
printf("Tu nombre es %s", nombre);
printf("\n\n Introduce tu nombre
completo: ");
fflush(stdin);
scanf("%s",&nombre);
printf("Tu nombre es %s", nombre);
printf("\n\n");
system("PAUSE");
Escribir una cadena de caracteres
La función puts( ) escribe una cadena de
caracteres en pantalla, y reemplaza el caracter
nulo de terminación de cadena ( \0 ) por el
caracter nueva línea ( \n )
Actividad Grupal
Comparar el uso de printf() y puts()
para la escritura de strings.
Actividad Grupal
int main()
{ char frase[30];
printf("\n Introduce una frase : ");
fflush(stdin); // Limpia la memoria
gets(frase);
printf("La frase que escribiste es: ");
puts(frase); // Probar con puts y printf
printf("Fin del programa... ");
printf("\n\n");
system("PAUSE");
}
Cadena de caracteres
• La estructura compañera de una cadena de caracteres es el
ciclo while. La mayoría de los problemas de cadena de
caracteres son codificados con esta estructura:
int i=0;
while ( cadena[i] != ‘\0’)
{
i++;
}
• En donde el código del while se ejecutará mientras no se
llegue al fin de la cadena de caracteres.
Actividad Grupal
Define el pseudo-algoritmo y el código de la función
cuantosCaracteres, que recibe una cadena de 50
caracteres y regresa el número de caracteres “validos”
almacenados en el arreglo.
Pseudo-algoritmo: cuantosCaracteres
entero funcion cuantosCaracteres (caracter : arreglo[50])
{
var entero : indice = 0
mientras arreglo[indice] != fin de cadena
{
indice++
}
regresar (indice)
}
Solución
Actividad Grupal
int cuantosCaracteres (char A[50])
{
int i=0;
while (A[i] != ’\0’)
{
i++ ;
}
return i;
}
Actividad colaborativa
(5 minutos)
Define el pseudo-algoritmo y el código de la función
cuantasRepeticiones, que recibe una cadena de 50
caracteres y un caracter, y regresa el número veces
que se repite el caracter en la cadena.
Pseudo-algoritmo: cuantasRepeticiones
entero funcion cuantasRepeticiones (caracter : arreglo[50], caracter : x)
{
var entero : indice = 0, veces = 0
mientras arreglo[indice] != fin de cadena
{
if (x == arreglo[indice])
veces++
indice++
}
regresar (veces)
} Solución
int cuantasRepeticiones (char A[50], char x)
{
int i=0, veces=0;
while (A[i] != ’\0’)
{
if (A[i]==x)
{
veces++; Solución
}
i++ ;
}
return veces;
}
Actividad colaborativa
(5 minutos)
Escriba el procedimiento reemplazarCaracter, que
recibe una cadena de 50 caracteres y dos caracteres x
y y. El procedimiento deberá reemplazar todos los
caracteres x en la cadena por el caracter y.
void reemplazarCaracter (char cadena[50], char x, char y)
{
int i=0;
while(cadena[i] != '\0')
{
if (cadena[i] == x)
{
cadena[i] = y; Solución
}
i++;
}
}
Funciones útiles para caracteres
Librería ctype.h
Función Significado
Convierte un caracter a
toupper(caracter)
mayúscula
Convierte un caracter a
tolower(caracter)
minúscula
Funciones útiles para cadenas
Librería string.h
Función Significado
Copia la cadena fuente en la cadena
strcpy(destino,fuente)
destino
Une dos cadenas. Agrega (pega) a la
strcat(destino,fuente)
cadena destino la cadena fuente
Regresa la longitud de la cadena, es decir,
strlen(cadena) regresa un entero igual al número de
caracteres de la cadena.
Compara dos cadenas. Regresa:
• 0 = Si cadena1 es igual a cadena2
strcmp(cadena1, cadena2)
• Diferente a 0 = Si cadena1 es diferente
a cadena2
strcpy (destino, fuente)
El siguiente programa declara una cadena para
almacenar nombres de personas
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char nombre[26];
strcpy(nombre, "Francisco");
puts(nombre);
system("PAUSE");
}
strlen (cadena)
El siguiente programa lee una cadena y después la imprime
separando cada caracter con un asterisco.
int main()
{
char letrero[31];
printf("\n Dame una cadena (MAXIMO 30 CARACTERES): ");
fflush(stdin); // limpia la memoria
gets(letrero);
for(int k=0; k < strlen(letrero); k++)
{
printf("%c * ", letrero[k]);
}
printf("\n\n");
system("PAUSE"); // Frena la ejecución del programa
}