2dpp

Anuncio
Caracteres y Cadenas
Funcionamiento y algunas
funciones para su
manipulación
SESIÓN 6
Caracteres

Declaración
Sintaxis
tipo_de_dato nombre;
Ejemplo:
char carac;
Mónica E. García García
1
Caracteres
Recordar que un carácter es una variable capaz de
almacenar un símbolo el cual puede tomar el valor
de:
 Una letra (mayúscula o minúscula)
 Un número (entre el 0 y 9)
,
 Un carácter especial (puede ser \, , @, ?, > , +, etc
k
7
Letra
Número
*
o
Carac. Especial
Mónica E. García García
Caracteres
Ejemplo de lectura y salida
void main()
{
char sexo; // Declaracion de un caracter
printf(“\nDar sexo [M]asculino o [F]emenino”);
//Algunas veces es necesario usar fflush(stdin);
scanf(“%c”,&sexo);
printf “El sexo fue %c”, sexo);

}
Mónica E. García García
2
Operaciones con Caracteres



Inicialización y declaración “simultanea”
char sexo=‘ M’;
Inicialización /asignación
sexo=‘ M’;
Comparación entre variables o contra caracteres
if ( sexo == ‘M’)
printf(“Masculino”);
if ( ‘N’ > ‘O’ )
printf( “La letra N es mayor a
la letra O”);
Mónica E. García García
Operaciones con Caracteres

Asignación de valores numéricos a un caracter


Suponer char carac=‘ M’;
si carac++;
printf(“\nValor = %c”,carac); //La salida es N
Suponer char carac=79;
equivale a char carac=‘O’;
si carac++;
printf(“\nValor = %c”,carac); //La salida es P
Recordar que las variables char (carácter) aceptan valores numéricos porque
los caracteres son representados por valores del código ASCII, los cuales
son valores enteros(ver al final tabla del código ASCII).
Mónica E. García García
3
Funciones para Caracteres
El argumento de las funciones siguientes debe de ser un carácter ( char c; )o bien
su correspondiente valor numérico en ASCII. El valor de retorno es un int. Las
funciones regresan un valor diferente de cero si el argumento satisface la condición
y un valor igual a cero si no lo hace.











islower(c) Determina si c (variable tipo caracter) es una letra minúscula
isupper(c) Determina si c es una letra mayúscula
isalpha(c) Determina si c es una letra mayúscula o minúscula
isdigit(c) Determina si c es un dígito decimal
isalnum(c) Determina si c es una letra mayúscula o minúscula o dígito decimal
iscntrl(c) Determina si c es un carácter de control (como \n)
isgraph(c) Determina si c es un carácter de impresión excepto espacio
isprint(c) Determina si c es un carácter de impresión incluyendo espacio
ispunct(c) Determina si c es un carácter de impresión excepto espacio, letra o dígito
isspace(c) Determina si c es un espacio, avance de línea, nueva línea, retorno de carro,
tabulador, tabulador vertical
isxdigit(c) Determina si C es un dígito hexadecimal
Nota. Se debe usar la librería ctype.h
Mónica E. García García
Funciones
Verifica si es una letra
int isalpha(int c);
La función retornará un valor diferente de cero en caso
de que sea una letra(ya sea mayúscula o minúscula).
Ejemplo:
#include <stdio.h>
#include <ctype.h>
void main()
{
char c = ‘a';
if (isalpha(c))
printf(”\n %c es una letra",c);
else
printf(”\n %c no es una letra",c);
}
Probar cambiando el valor de c
por:
‘C’ ,
`?’
‘4’;
‘c’
y observar los resultados.
Mónica E. García García
4
Funciones
Verifica si es un carácter numérico
int isdigit(int c);
La función retornará un valor diferente de cero en caso
de que sea un número(entre 0 y 9).
Ejemplo:
Probar cambiando el valor de c
por:
‘C’ ,
`?’
‘8’;
‘.’
y observar los resultados.
#include <stdio.h>
#include <ctype.h>
void main()
{
char c = ‘a';
if (isdigit(c))
printf(”\n %c es un dígito",c);
else
printf(”\n %c no es un dígito”,c);
}
Mónica E. García García
Funciones
Verifica si es una letra minúscula
int islower(int c);
La función retornará un valor diferente de cero en
caso de que sea letra minúscula.
Ejemplo (forma 2):
Ejemplo:
void main( )
{
void main( )
{
int num;
char sexo= ‘ f ’;
num= islower( sexo);
if (num != 0 )
printf (“Minúscula %c”,sexo);
char sexo= ‘ f ’;
if (islower( sexo) != 0 )
printf (“Minúscula”);
}
}
Mónica E. García García
5
Funciones de conversión
MAY a min y de min a MAY
Al igual que las funciones anteriores el resultado esperado
es un número ,tipo int, diferente de cero.
tolower(c)
Convierte c a letra minúscula.

toupper(c)
Convierte c a letra mayúscula.

//Ejemplo de toupper
#include <string.h>
#include <stdio.h>
#include <ctype.h>
void main()
{
int tam, i;
char cade[ ]= ”un ejemplo";
tam = strlen(cade);
for (i=0; i<tam; i++)
{
cade[i] = toupper(cade[i]);
}
printf(”\n Cambio= %s",cade);
}
Mónica E. García García
Lectura de un carácter sin
visualizacion
int getchar(void);
//Ejemplo
#include <stdio.h>
void main(void)
{
int c; //probar que c sea un char y observar el resultado
while ((c = getchar()) != '\n') // La lectura se realizará hasta que se de un <enter> desde teclado
printf("%c", c);
}
Mónica E. García García
6
Lectura de un carácter sin
visualizacion
int getch(void);
Esta es una función no de ANSI C, sin embargo es mal utilizado para
detener la pantalla de ejecución. Compiladores que trabajan para ambiente DOS
lo soportan. Lo que hace es leer un caracter sin visualizarlo en pantalla y
detecta un carácter del código extendido(por ejemplo las flechas arriba, abajo,
etc.). Retorna el código del carácter leído.
#include <conio.h>
#include <stdio.h>
void main( )
{
int c;
int extendido = 0;
c = getch(); // La primer invocación (la que paraliza el programa a la espera del ingreso de la tecla) devuelve 0x00.
if (!c)
extendido = getch(); // La segunda invocación regresa el codigo del valor leido desde teclado.
if (extendido)
printf(”\nEl carácter es extendido ");
else
printf(” \n El carácter no es extendido ");
}
Mónica E. García García
Cadenas
Una cadena es una variable capaz de almacenar más de
un símbolo. Dichos símbolos pueden tomar el valor
de:
Letras (mayúscula o minúscula)
 Números (entre el 0 y 9)
,
 Caracteres especiales (puede ser \, , @, ?, > , +, el
espacio en blanco , etc
 Una combinación de las anteriores
Mónica E. García García
7
Cadenas
Un cadena es un vector de caracteres por lo tanto
gráficamente podemos representar una cadena de la
siguiente forma:

h o
l a \0 . . .
0
2
1
3
4
. . .
n
Por lo que la definición de cadena se amplia : Una
cadena en C es una secuencia de dos más caracteres
finalizadas por un caracter NULL o \0:

Mónica E. García García
Declaraciones
Diferentes tipo de declaración de una variable tipo
caracter



Como un vector
char cad[10];
Como un vector sin dimensión
char cade[ ]=“La Universidad”;
Como un apuntador
char *cade= “Programacion en C”;
Mónica E. García García
8
Inicialización de las cadenas

Inicialización de la variable cade dentro
de la declaración
char cade[5]="hola";
El código anterior es equivalente a:
char cade[5]={'h','o','l','a','\0'};
Mónica E. García García
Cadenas
Ejemplo de lectura y salida
void main()
{
char direccion[25]; // Declaracion de una cadena
printf(“Dar dirección: ”);
gets(direccion);
printf “Tu dirección es %s”, direccion);

}
Mónica E. García García
9
Funciones para
el manejo de cadenas
Todas las funciones siguientes estan incluidas en la librería
<string.h>
Suponer que char s[15], ct[5]; e int n;




strcpy(s,ct) Copia la cadena ct a s incuyendo '\0', regresa s.
strncpy(s,ct,n) Copia hasta n caracteres de la cadena ct a s y
regresa s, termina la cadena con '\0'.
strcat(s,ct) Concatena ct al final de s y regresa s.
strncat(s,ct,n) Concatena hasta n caracteres de la cadena ct a
s, termina con '\0' y regresa s.
Mónica E. García García
Funciones para ...





strcmp(cs,ct) Compara cs con ct. El valor de retorno es 0,
cuando son idénticas un valor negativo, cuando cs<ct y positivo
cuando cs>ct.
strncmp(cs,ct,n) La misma tarea que la función anterior
excepto que se compara hasta n caracteres.
strchr(cs,c) Regresa un apuntador a la primera ocurrencia de
c en cs, o NULL si no está presente.
strrchr(cs,c) Regresa un apuntador a la última ocurrencia de
c en cs, o NULL si no está presente.
strlen(cs) Regresa la longitud (tipo int) de cs.
Mónica E. García García
10
Ejemplos

Ejemplo de la funcion strlen
void main()
{
char cade[25];
int longitud;
printf("Dar una frase: ");
gets(cade);
longitud = strlen(cade);
printf("La longitud es de %d caracteres ",longitud);
getch();
}
Mónica E. García García
Ejemplos

Programa que ejemplifica el uso de strcpy
void main()
{
char completo[45];
char m[2][4]={{'5','B','#','\0'},{'E','a','2'}};
char nom[10]="Julio", apat[10]="Ortega", amat[10]="Ruiz";
strcpy(completo,nom);
printf("\n%s",completo);
strcpy(completo,apat);
printf("\n%s",completo);
getch();
}
Mónica E. García García
11
Ejemplos

Ejemplo de la funcion strncat
#include <string.h>
#include <stdio.h>
void main( )
{
char destino[25 ]=“La casa”;
char origen[ ] = ”abandonada";
strncat(destino, origen, 7);
printf(”\n%s", destino);
}
Mónica E. García García
Comparación de cierto número
de caracteres

int strncmp(const char *s1, const char *s2, size_t maxlen);
El tercer parámetro indica el número de elementos a comparar entre
las cadenas.
#include <stdio.h>
#include <string.h>
void main( )
{
char cad1[ ]= "aaabbb", cad2[ ]= "bbbccc", cad3[ ]= ”bbb";
int comp;
comp = strncmp(cad2,cad1,3);
if (comp > 0)
printf(”\n Cadena 2 es mas grande que cadena 1 ");
else
printf(Cadena 1 es mas grande que cadena 2” );
comp = strncmp(cad2,cad3,3);
if (comp > 0)
printf(" \n Cadena 3 es mas grande que cadena 2 ");
else {
if (comp ==0 ) printf (“Cadenas iguales”);
else
printf(" \n Cadena 2 es mas grande que cadena 3 ");
}
}
Mónica E. García García
12
Funciones de lectura y salida


Además de scanf la lectura puede realizarse
con gets y la salida con puts.
int puts(const char *s);


La función retorna un entero no negativo en caso
de que la salida de la cadena se haya realizado
correctamente en caso contrario retornara EOF**.
char * gets(char *s);
La función retornará una cadena(s) en caso de ser
exitosa la lectura y NULL** en caso contrario.
** Términos que se manejaran en temas siguientes.

Mónica E. García García
Funciones de lectura y salida

Ejemplo:
#include <stdio.h>
void main()
{ char c, mensaje[30];
int i = 0;
puts( “Introducir una línea de texto: " );
// se lee carácter por carácter con getchar();
while ( ( c = getchar() ) != ‘\n')
{
mensaje[ i++ ] = c;
}
mensaje[i] = ‘\0'; //para terminar correctamente la cadena
puts( ”\n La linea introducida fue = " );
puts( mensaje );
}
Mónica E. García García
13
Otras funciones


atoi, atof, pero éstas fueron presentadas en
el material 3.
itoa, convierte un entero a una cadena pero
no es disponible para ANSI C.
Mónica E. García García
Tabla
del
código
ASCII
Mónica E. García García
14
Descargar