Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TRATAMIENTO DE CADENAS
El BORLAND C++ V5.02, y DEV C++ incluyen el archivo de cabecera string.h y contiene una treintena de
rutinas pertenecientes a la familia str y que estn agrupadas en cinco categoras, dependiendo del tipo de accin
que realizan.
Las cadenas de C son vectores de caracteres (elementos de tipo char) con una peculiaridad: el texto de la cadena
termina siempre en un carcter nulo. El carcter nulo tiene cdigo ASCII 0 y podemos representarlo tanto con
el entero 0 como con el carcter \0 (recuerda que \0 es una forma de escribir el valor entero 0). Ojo! No
confundas \0 con 0: el primero vale 0 y el segundo vale 48.
Declaracin de Cadenas
Esta cadena, por ejemplo, se declara con capacidad para almacenar 10 caracteres:
char a[10];
#include <>
//#define Max 20
int const Max = 20;
int main() // gets()
{
char Cod[Max], Nombre[Max];
printf("Ingrese el Codigo ---> ");
gets(Cod);
printf("Ingrese el Nombre ---> ");
gets(Nombre);
system("cls");
printf("Codigo : %s\n", Cod);
printf("Nombre : %s\n", Nombre);
system("PAUSE");
return (0);
#include <>
int main() // getchar()
{
char Car;
int Ctdor = 0;
//while((Car = getchar())!=EOF)
//while((Car = getchar())!='\r')
while((Car = getchar())!='\n')
if(Car == 'a')
Ctdor = Ctdor+1;
printf("%d letras a\n", Ctdor);
system("PAUSE");
return (0);
}
}
La funcin getchar()
Se utiliza getchar() para leer carcter a carcter.
\0
b
a
\ 0
En esta separata no se han detallado todas esas funciones, tampoco se hace un detalle exhaustivo de cada una de
ellas. La AYUDA (help) del BORLAND es interesante, en el IDE de C seleccione una instruccin y presione
CTRL+F1 y obtendr suficiente informacin relacionada con dicha instruccin.
En esta se detallan programas con algunas de las funciones mencionadas de las siguientes categoras:
Cambio
Comparacin
Concatenacin
Copiado/Modificacin
Bsqueda
Se deja al lector como ejercicio para aquellas funciones no implementadas.
Para cada uno de las diferentes funciones vamos a definir algunos parmetros que usaremos en cada una de las
aplicaciones:
Cad
Cad1
Cdes
Cori
Nc
C
Eb
:
:
:
:
:
:
:
UNI-FIIS
Cadena de caracteres
Cadena de caracteres
Cadena de caracteres destino
Cadena de caracteres origen
Numero de caracteres
Carcter
Carcter espacio (Carcter blanco)
G. A. SALINAS A.
2 de 7
UNI-FIIS
G. A. SALINAS A.
3 de 7
Las tres primeras funciones efectan la comparacin entre el total de los caracteres de las cadenas Cad y
Cad1 teniendo en cuenta el tipo, mientras que las dos ultimas efectan la comparacin de la subcadena de
Nc caracteres.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
#include<ctype.h>
void Compara(int a);
void main()
{
char *Cad = "UNIFIIS";
clrscr();
int x;
char *Cad1;
//Puntero a caracter
do
{
cout<<"Si desea continuar ....\n";
cout<<"Digite las iniciales de su Ecuela\n";
gets(Cad1);
}while(strcmp(Cad, Cad1));
cout<<"Bienvenido a tratamiento de cadenas\n";
// Compara independientemente del tipo de caracter
Cad1 = "unifiis";
x=stricmp(Cad,Cad1);
printf("x = %d\n", x);
printf("Cad: %s Cad1: %s\n", Cad, Cad1);
Compara(x);
//Compara teniendo en cuenta el tipo de caracter
Cad1 = "eapisa";
x=strcmp(Cad,Cad1);
printf("x = %d\n", x);
printf("Cad: %s Cad1: %s\n", Cad, Cad1);
Compara(x);
//Compara solo un numero determinado de carateres
Cad = "Lima la Horrible";
Cad1= "Limamanta Pacha";
x = strncmpi(Cad, Cad1, 4);
printf("x = %d\n", x);
printf("Cad: %s Cad1: %s\n", Cad, Cad1);
Compara(x);
getch();
}
void Compara(int a)
{
if(a == 0)
printf("Las Cadenas son iguales\n\n");
else
if(a<0)
printf("Cad es Menor a Cad1\n\n");
else
printf("Cad es Mayor a Cad1\n\n");
}
UNI-FIIS
G. A. SALINAS A.
4 de 7
En esta categora se usan para aadir desde una cadena origen Cori a una cadena destino Cdes, para los
cuales se tienen las siguientes funciones:
strcat (*Cdes,*Cori)
strncat (*Cdes, *Cori, Nc)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
#define Max 80
void main()
{
int Nc;
char Cdes[Max] = "Ceviche";
clrscr();
char Cori[Max] = "Mixto....";
char Cad1[Max];
char Cad[Max]="UNIFIIS";
do
{
cout<<"Si desea continuar ....\n";
cout<<"Digite las iniciales de su Ecuela\n";
gets(Cad1);
}while(strcmp(Cad, Cad1));
cout<<"BIENVENIDO A TRATAMIENTO DE CARACTERES\n\n";
strcpy(Cad,Cdes);
printf("Cad = %s\n",Cad);
puts(Cdes);
//Se Concatena Nc caracteres de Cori cada vez
for(Nc=0;Nc<9;Nc++)
{
strcpy(Cdes,Cad);
strncat(Cdes,Cori, Nc);
puts(Cdes);
}
getch();
// Investigar strdup(), stpcpy() y presente aplicaciones.
}
1.4 CATEGORIA DE COPIADO
Las funciones de esta categora se usan para el copiado desde una cadena origen Cori a una cadena destino
Cdes veamos:
strcpy(*Cdes, *Cori) //Copia el contenido de Cori en Cdes
strpcpy(*Cdes,*Cori) //Lo mismo a la anterior pero devuelve un apuntador al final de Cdes
strncpy(*Cdes, *Cori, Nc)//Lo mismo al anterior pero Copia hasta Nc caracteres
strdup(*Cad)
//Asigna suficiente memoria para almacenar una copia de Cad.
Las dos primeras funciones copian de la cadena origen a la cadena destino. La tercera copia un numero Nc
de caracteres de la cadena origen a la cadena destino.
La ltima funcin asigna suficiente memoria para guardar un duplicado de la cadena de caracteres Cad que
debe asignarse a una variable de ese tipo, devolviendo un puntero a esa variable.
#include<string.h>
#include<>
#define Max 80
void main()
{
UNI-FIIS
G. A. SALINAS A.
5 de 7
int Nc;
clrscr();
char Cdes[Max], Cori[Max], Cad[Max], Eb;
char *pc;
Eb = ' ';
cout<<"INGRESE UNA CADENA DE CARACTERES\n";
gets(Cori);
cout<<"AHORA SE HA COPIADO EN Cdes\n";
strcpy(Cdes, Cori);
printf("Cdes : %s, Cori : %s \n", Cdes, Cori);
printf("Y EN LA DIRECCION : %p\n\n",Cdes);
cout<<"LA CADENA ORIGEN SE COPIA CON strdup()\n";
pc = strdup(Cori);
cout<<"Cori : "<<Cori<<"\n";
printf("En la direccion %p : \n\n",pc);
cout<<"AHORA LA CADENA SE COPIA CON strncpy\n";
free(pc);// libera memoria
Cdes[Max] = ' ';
printf("Cdes : ", Cdes);
for(Nc=0;Nc<strlen(Cori);Nc++)
{
strset(Cdes,Eb);
strncpy(Cdes,Cori,Nc+1);
//puts(Cdes);
printf("%s",Cdes);
}
//Cdes[Nc+1] = '\0';
getch();
}
1.5 CATEGORIA DE BUSQUEDA
En esta categora tenemos las siguientes funciones:
strchr (*Cad, C) (1)
strrchr (*Cad, C) //Lo mismo al anterior devuelve un apuntador a la ultima ocurrencia.
strcspn (*Cad, *Cad1) (3)
strpbrk(*Cad, *Cad1) (4)
strspn (*Cad, *Cad1) (5)
strtok (*Cad, *Cad1) (6)
strstr (*Cad, *Cad1) (7)
(1) Devuelve un apuntador a la primera ocurrencia del byte menos significativo de C en la cadena apuntada
por Cad. (3) Devuelve un apuntador del primer carcter en la cadena apuntada Cad, que no se corresponde
con ningn carcter de la cadena apuntada por Cadl nulo en otro caso. (4) Devuelve un apuntador al
primer carcter de la cadena apuntada por Cad que se corresponde con algn carcter de la cadena apuntada
por Cadl, y nulo en otro caso.(5)devuelve la longitud de la subcadena inicial de la cadena apuntada por Cad
que esta constituida solo por aquellos caracteres contenidos en la cadena apuntada por Cadl. (6) devuelve un
apuntador a la siguiente palabra de la cadena apuntada por Cad. (7) devuelve un apuntador a la primera
ocurrencia en la cadena apuntada por Cad de la cadena apuntada por Cadl, nulo en otro caso.
#include<string.h>
#include<iostream.h>
#define Max 80
void main()
{
int Nc;
clrscr();
char *Cad = " Martha Cerra Lima";
UNI-FIIS
G. A. SALINAS A.
6 de 7
UNI-FIIS
G. A. SALINAS A.
7 de 7