M. en C.
Marisol Hernández López Academia Computación
ARREGLOS DE CARACTERES
Son conocidos como cadenas de caracteres y es un tipo especial de arreglos, pues se trata de
un conjunto de datos tipo char, que termina con un caracter nulo(“\0”), los elementos de un
arreglo de tipo carácter se almacenan en forma contigua y subsecuente en la memoria de la
computadora y el índice del primer elemento es cero. Sin embargo, al ingresar los datos al
arreglo no se utiliza el índice, ni la estructura for, en su lugar la función de entrada maneja el
modificador de datos de cadenas “%s”.
Lenguaje C provee una librería que contiene el conjunto de funciones utilizadas para
procesamiento de cadenas de caracteres, esta es la librería string.h
Los identificadores de las cadenas de caracter se definen de acuerdo con lo que almacenan,
por que los elementos del arreglo no se procesan de forma individual o independiente como
lo hacen los arreglos numéricos, por ejemplo, se puede definir la cadena NOMBRE,
PALABRA, DIRECCION, APELLIDO, PRODUCTO, etc.
REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO
Operaciones permitidas con cadenas:
Entrada: Salida: Evaluación de condición:
NOMBRE
NOMBRE
SI
CADENA[i]≠”A”
SINTAXIS DE DECLARACIÓN EN LENGUAJE C
Un arreglo de caracteres también tiene que declararse antes de ser utilizado en un programa
y de la misma forma que los arreglos numéricos se puede definir una constante de longitud
máxima para el arreglo, esta constante se define en las directivas del procesador con la
instrucción #define.
char nombre_cadena[longitud_de_cadena];
Ejemplos:
char nombre[30];
char apellido[MAX];
char palabra[MAX];
char frase[50];
M. en C. Marisol Hernández López Academia Computación
INSTRUCCIONES DE ENTRADA Y SALIDA PARA MANEJO DE CADENAS DE
CARACTERES
ENTRADA: Una cadena de caracteres se lee o se recibe como entrada con la función de
entrada de datos scanf(), utilizando el modificador de tipo de dato “%s”, donde el
modificador “s” significa string (cadena).
Sintaxis general:
scanf(“%s”,&nombre_cadena);
OBSERVAR: Aunque se trata de un arreglo las cadenas NO utilizan los corchetes con índice,
debido a que su procesamiento es conjunto. Únicamente se escribe el nombre de la cadena
que se quiere leer.
Ejemplo:
scanf(“%s”,&nombre); //Se recibe una cadena llamada nombre como entrada.
scanf(“%s”,&palabra); //Se lee una cadena llamada palabra que es introducida por el usuario.
SALIDA: Una cadena de caracteres se escribe o imprime como salida con la función de salida
de datos printf(), utilizando el modificador de tipo de dato “%s”, donde el modificador “s”
significa string (cadena).
Sintaxis general:
printf(“La cadena es: %s”,nombre_cadena);
OBSERVAR: Aunque se trata de un arreglo las cadenas NO utilizan los corchetes con índice,
debido a que su procesamiento es conjunto. Únicamente se escribe el nombre de la cadena
que se quiere imprimir.
Ejemplo:
printf(“La cadena es: %s”,nombre); //Se imprime una cadena llamada nombre.
printf(“La cadena es: %s”,palabra); //Se imprime una cadena llamada palabra que fue
introducida anteriormente.
M. en C. Marisol Hernández López Academia Computación
SUBRUTINA PARA CREAR UN ARREGLO DE CARACTERES
LEE_NOMBRE void LEE_NOMBRE(char nombre[ ])
{
printf(“Ingresa el nombre:”);
NOMBRE scanf (“%s”,&nombre);
}
FIN
SUBRUTINA PARA IMPRIMIR UN ARREGLO DE CARACTERES
VER_NOMBRE void VER_NOMBRE(char nombre[])
{
printf(“El nombre es: %s”,nombre);
NOMBRE }
FIN
PROGRAMA PRINCIPAL:
Codificación:
#include <stdio.h>
INICIO
#include <conio.h>
#define N 30
LEE_NOMBRE void LEE_NOMBRE(char [ ]);
void VER_NOMBRE(char [ ]);
void main ()
VER_NOMBRE
{
char NOMBRE[N];
LEE_NOMBRE(NOMBRE);
FIN VER_NOMBRE(NOMBRE);
getch();
}
OBSERVAR: El arreglo de caracteres o cadena se pasa como argumento de entrada a una
función igual que los arreglos numéricos, sólo se agregan los corchetes vacíos.
M. en C. Marisol Hernández López Academia Computación
Cuando se ejecuta el programa, este sólo aceptará los nombres que consten de una sola
palabra, es decir scanf() no podrá almacenar nombres como ANA MARIA, JOSE LUIS,
etc., debido a que el procesamiento de cadenas de caracteres contempla el espacio (barra
espaciadora) entre las palabras como el carácter nulo, lo que indicará que es el fin de la
cadena y el segundo nombre ya no podrá guardarse.
Solución: Podemos sustituir el uso de la función scanf() con la función de entrada de
cadena gets(), que significa get string(obtener cadena), la cual permite leer la barra
espaciadora como un carácter blanco y no como el carácter nulo.
Función de entrada modificada:
void LEE_NOMBRE(char nombre[ ])
{
printf(“Ingresa el nombre:”);
gets(nombre);
}
Ejemplo 1: Desarrollar un programa que recibe el nombre completo de un alumno, su
matricula y la calificación de 5 materias para calcular su promedio, el programa imprime, el
nombre, matricula, promedio e indica si es aprobado o reprobado.
INICIO DATOS_ALUMNO
Esta es la subrutina de creación de
arreglos, aquí se introducen los
DATOS_ALUMNO NOMBRE, datos: nombre, matrícula y un
MATRICULA
arreglo numérico que guarda las 5
calificaciones que se procesará en
PROMEDIO
otra subrutina.
i=0
VER_ALUMNO
SI
PARA MATE[i] i=i+1
FIN i<5
NO
FIN
VER_ALUMNO
PROMEDIO
M. en C. Marisol Hernández López Academia Computación
P,NOMBRE, MATRICULA
S=0
i=0
NO
IF
SI P≥6
PARA S=S+MATE[i] i=i+1
i<5
SI
NO “APROBADO” “REPROBADO”
P=S/5
FIN
FIN
En esta subrutina se realiza la
impresión o salida de datos, pero
además integra una estructura de
decisión para indicar si el alumno
está aprobado o reprobado.
Código en Lenguaje C:
#include <stdio.h>
#include <conio.h>
#define N 50
#define M 5
void DATOS_ALUMNO(char [],char [],float []);
float PROMEDIO(float []); //La función devuelve el promedio calculado.
void VER_ALUMNO(float &,char[],char []); //La función recibe la variable promedio
como entrada por eso la declaración float &.
void main()
{
char NOMBRE[N];
char MATRICULA[M];
float MAT[5];
float P;
DATOS_ALUMNO(NOMBRE,MATRICULA,MAT);
M. en C. Marisol Hernández López Academia Computación
P=PROMEDIO(MAT);
VER_ALUMNO(P,NOMBRE,MATRICULA);
getch();
}
void DATOS_ALUMNO(char nombre[],char matricula[],float mat[])
{
int i;
printf("Nombre del alumno:");
gets(nombre);
printf("Matricula del alumno: ");
gets(matricula);
for(i=0;i<5;i++)
{
printf("Materia[%d]:",i+1);
scanf("%f",&mat[i]);
}
}
float PROMEDIO(float mat[])
{
float s,p;
int i;
s=0;
for(i=0;i<5;i++)
{
s=s+mat[i];
}
p=s/5;
return p;
}
void VER_ALUMNO(float &prom,char nombre[],char matricula[])
{
printf("\nAlumno:%s",nombre);
printf("\nMatricula: %s",matricula);
printf("\nPromedio: %0.1f",prom);
if(prom>=6)
{
printf("\nAprobado.");
}
M. en C. Marisol Hernández López Academia Computación
else
{
printf("Reprobado.");
}
}
EJECUCIÓN DEL PROGRAMA:
SUBRUTINA CREARARREGLO
SUBRUTINA VERARREGLO
La subrutina promedio pasa el resultado a la función principal pero este no se muestra ya que
después este resultado es pasado a la función ver_arreglo para mostrarlo y mostrar también el
mensaje de APROBADO O REPROBADO
LENGUAJE C: OPERACIONES CON CADENAS DE CARACTERES
LIBRERÍA string.h
Las funciones para realizar procesamiento de cadenas de caracteres son las siguientes:
• strcpy(cadena1,cadena2);
Permite copiar la cadena2 en la cadena1, la cadena1 debe ser de longitud igual o
mayor que la cadena2; la función necesita 2 argumentos de entrada: cadena1 y cadena2.
• strcat(cadena1,cadena2);
Permite unir la cadena2 con la cadena1, la cadena1 debe ser de longitud doble para
aceptar la concatenación. La función necesita 2 argumentos de entrada: cadena1 y
cadena2.
• R=strcmp(cadena1,cadena2);
Compara las cadenas de entrada, devuelve un valor positivo si la cadena1 es mayor
que la cadena2, devuelve un valor negativo si la cadena1 es menor que la cadena2 y
M. en C. Marisol Hernández López Academia Computación
0 si las cadenas son iguales. La función necesita 2 argumentos de entrada: cadena1
y cadena2 y una variable de salida para recibir el resultado de la comparación.
• L=strlen(cadena);
Calcula la longitud de la cadena de caracteres, cuenta los datos hasta el caracter
nulo y devuelve el valor de conteo. La función necesita un solo argumento de
entrada y uno de salida para recibir el resultado del conteo de caracteres.
Programa 1:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 20
void INGRESA_NOMBRE(char [], char []);
void IMPRIMIR_NOMBRE(char [],char []);
void main ()
{
char NOMBRE1[N],NOMBRE2[N];
int R,L1,L2;
INGRESA_NOMBRE(NOMBRE1,NOMBRE2);
IMPRIMIR_NOMBRE(NOMBRE1,NOMBRE2);
printf("\n\n");
strcpy(NOMBRE1,NOMBRE2);
IMPRIMIR_NOMBRE(NOMBRE1,NOMBRE2);
printf("\n");
strcat(NOMBRE1,NOMBRE2);
IMPRIMIR_NOMBRE(NOMBRE1,NOMBRE2);
printf("\n\nNuevas cadenas:");
INGRESA_NOMBRE (NOMBRE1,NOMBRE2);
IMPRIMIR_NOMBRE(NOMBRE1,NOMBRE2);
R=strcmp(NOMBRE1,NOMBRE2);
printf("\nEL resultado es: %d",R);
L1=strlen(NOMBRE1);
printf("\nLongitud del nombre1= %d",L1);
L2=strlen(NOMBRE2);
printf("\nLongitud del nombre2= %d",L2);
printf("\n");
getch();
}
M. en C. Marisol Hernández López Academia Computación
void INGRESA_NOMBRE(char nombre1[], char nombre2[])
{
printf("\nIngresa el nombre1:");
gets(nombre1);
printf("\nIngresa el nombre2:");
gets(nombre2);
}
void IMPRIMIR_NOMBRE(char nombre1[],char nombre2[] )
{
printf("\nEl nombre1 es: %s",nombre1);
printf("\nEl nombre2 es: %s",nombre2);
}