TRABAJO DE INVESTIGACION :CADENAS
INSTITUTO TECNOLOGICO DE SALINA CRUZ
UNIDAD 7. CADENAS.
7.1. FUNDAMENTOS DE CADENAS Y CARACTERES
7.2. FUNCIONES DE MANEJO DE CADENAS Y CARACTERES
.
TRABAJO DE INVESTIGACION DOCUMENTAL QUE PARA ACREDITAR LA MATERIA DE ALGORITMOS Y PROGRAMACION PRESENTA:
Fabián Cruz Raquel
TITULAR DE LA MATERIA: M. EN C. SUSANA MONICA ROMAN NAJERA
CARRERA: ING. MECANICA GRUPO: 2
INDICE DE CONTENIDO.
INTRODUCCION……………………………………………………………………..3
PRUEBA Y MANEJO DE CARACTERES EN C………………………………...4
CADENAS DE CARACTERES…………………………………………………....6
CONCLUSIONES Y FUENTES DE INFORMACION………………………….10
ANEXOS…………………………………………………………………………….11
INTRODUCCION.
Cadena: es un array de caracteres (char) terminado en un carácter nulo (\0)
Array de caracteres
A B C
Cadena de Caracteres
A B C \0
Las cadenas se declaran como los arrays. Se inician con comillas.
char texto[5] = “ABC”; //contiene cadenas de 4 caracteres como máximo
1 Lectura y escritura de cadenas desde consola
leer cin >> nombre del array que recibe la cadena cin >> texto;
Escribir cout << nombre del array que contiene la cadena cout << texto;
Problemas:
cin no hace comprobación de límites, de manera que es posible que el usuario
introduzca más caracteres que los que pueda almacenar la cadena.
Si intento introducir desde teclado la cadena “Esto es un prueba” C++ deja de
leer encuentra el primer espacio en blanco y por lo tanto sólo habrá almacenado “Esto”.
Para solucionarlo se utiliza la función de biblioteca gets() que lee una cadena del
teclado hasta que se pulsa intro, el formato general de gets es: gets(nombre_array);
Manejo de cadenas en C <string.h>
•string.h es un archivo de la Biblioteca estándar que contiene la definición de macros, constantes ,funciones y tipos de utilidad para trabajar con cadenas de caracteres.
•Las funciones declaradas en string.h funcionan en cualquier plataforma que soporte ANSIC. Sin embargo, existen algunos problemas de seguridad con estas funciones, como el desbordamiento de arreglos, que hacen que algunos programadores prefieran opciones más seguras frente a la portabilidad que estas funciones ofrecen. Además, las funciones para cadenas de caracteres sólo trabajan con conjuntos de caracteres ASCII o extensiones ASCII compatibles.
Para poder utilizarlas funciones del manejo de cadenas, es necesario incluir la biblioteca:
#include<string.h>
•Además, es importante preservar el carácter determinación NULL‘\0’,ya que con éste es como C define y maneja las longitudes de las cadenas.
•Todas las funciones de la biblioteca estándar para el manejo de cadenas de Clore quieren para una operación satisfactoria.
Funciones para manipulación de arreglos de caracteres (Manipulación de cadenas)
•Las funciones de uso más común de dicho archivo de cabecera son:
Nombre de la función |
Descripción |
||
strcat() |
char* strcat(char* destino, constchar* fuente) Añade la cadena fuente al final de la destino. Devuelve la cadena destino. |
||
strlen() |
size_tstrlen( constchar* s ) Devuelve la longitud dela cadena s |
||
strncpy() |
char* strncpy( char*dest, constchar* fuente, size_tn) Copian caracteres de la cadena fuente a la cadena destino
|
||
strncat() |
char* strncat( char*s1, constchar* s2, size_tn) Añadelos primeros n caracteres de S2 a S1. Devuelve s1 si n>=strlen(s2), entonces strncat tiene el mismo efecto que strcat. |
|
|
strchr() |
char* strchr( constchar*s1, intch) Devuelveun apuntador a la primera ocurrencia de ch en s1, devuelve NULLsi ch no se encuentra en s1. |
|
|
strcmp() |
intstrcmp( constchar* s1, constchar* s2) Compara alfabeticamentela cadena s1 con s2 y devuelve un dato de: cero si s1 == s2 menor que cero si s1 < s2 mayor que cero si s1 > s2 |
|
|
strcspn() |
size_tstrcspn( constchar* s1, constchar* s2) Devuelve la longitud de la subcadenamás larga de s1que comienza con el carácter s1[0]y no contiene ninguno de los caracteres de la cadena s2. |
|
|
Prueba y manejo de caracteres en C <ctype.h.h>
Una biblioteca relacionada #include<ctype.h> la cual contiene muchas funciones útiles para convertir y probar caracteres individuales.
Las funciones más comunes para revisar caracteres tienen los siguientes prototipos:
Int isalnum(intc):Verdad si c es alfanumérico.
Inti salpha(intc):Verdad si c es una letra.
Inti sascii(intc):Verdad si c es ASCII.
Inti scntrl(intc):Verdad si c es un carácter de control.
Inti sdigit(intc):Verdad si c es un dígito decimal.
Inti sgraph(intc):Verdad si c es un carácter imprimible, exceptuando el espacio en blanco.
Int islower(intc):Verdad si c es una letra minúscula.
intisprint(intc):Verdad si c es un carácter imprimible, incluyendo el espacio en blanco.
Inti spunct(intc):Verdad si c es un signo de puntuación.
intisspace(intc):Verdad si c es un espacio
intisupper(intc):Verdad si c es una letra mayúscula.
intisxdigit(intc):Verdad si c es un dígito hexadecimal.
Las funciones para conversión de caracteres son:
Int toascii(intc):Convierte c a ASCII o un unsigned char de 7bits, borrando los bits altos.
Int tolower(intc):Convierte la letra c a minúsculas, si es posible.
Int toupper(intc):Convierte la letra c a mayúsculas, si es posible.
Cadenas de Caracteres.
Funciones Asociadas al Manejo de cadenas de caracteres
Aunque C no incorpora en su definición operadores para el manejo de cadenas de caracteres, todo compilador de C proporciona una librera estándar (string.h) con funciones para facilitar su utilización. Destacar algunas de ellas:
strcpy: La función strcpy se encuentra en la biblioteca <string.h> y se utiliza para copiar una cadena de caracteres (fuente) en el lugar que ocupaba otra (destino). Esta copia es destructiva, o sea, que todos los caracteres que estaban en la cadena destino desaparecen, aunque la cadena destino fuera más larga que la cadena fuente .La cadena destino se pone como primer argumento de la función y la cadena fuente como segundo. Vamos a verlo con un ejemplo.
#include<stdio.h>
#include<string.h>
int main()
{
char texto1[]="corta";
char texto2[]="mediana";
char texto3[]="larguisima";
strcpy(texto2,texto1);
printf("%s\n",texto2);
strcpy(texto2,texto3);
printf("%s\n",texto2);
getch();
return 0;
}
Resultado:
strcat: En el programa anterior vimos que la función strcpy es desctructiva, pero hay otra función en la librería <string.h> que copia una cadena (fuente) en otra (destino) sin destruir ésta, es decir, que copia una cadena detrás de la otra esta función es conocida como strcat. Vamos a hacer un ejemplo:
#include<stdio.h>
#include<string.h>
int main()
{
char texto1[]="Don Pepito";
char texto2[]=" y ";
char texto3[]="Don Jose";printf("%s\n",texto1);
strcat(texto1,texto2);
printf("%s\n",texto2);
strcat(texto1,texto3);
printf("%s\n",texto2);
getchar();
return 0;
Resultado:
strlen: esta función devuelve el total (entero) de caracteres que conforman una cadena (excluyendo el caracter nulo \0). Vamos a hacer un ejemplo:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MAXLON 80
int main(void)
{ char a[MAXLON+1];
int longitud;
clrscr();
printf ("Introduce una cadena (max. %d caracteres): ", MAXLON);
scanf("%s",&a);
longitud = strlen(a);
printf ("\nLongitud de la cadena: %d\n", longitud);
getch();
return 0;
}
Resultado:
strcmp: strcmp (abreviatura de ((string comparison))). La función strcmp recibe dos cadenas, a y b, devuelve un entero. El entero que resulta de efectuar la llamada strcmp(a, b) codifica el resultado de la comparación:
Es menor que cero si la cadena a es menor que b,
Es 0 si la cadena a es igual que b, y
Es mayor que cero si la cadena a es mayor que b.
Naturalmente, menor significa que va delante en orden alfabético, y mayor que va detrás.
#include <stdio.h>
#include <string.h>
int main()
{
char s1[6] = "Abeja";
char s2[6] = "abeja";
int i;
printf( "s1=%s\t", s1 );
printf( "s2=%s\n", s2 );
i = strcmp( s1, s2 );
printf( "s1 es " );
if( i < 0 ) printf( "menor que" );
else if( i > 0 ) printf( "mayor que" );
else printf( "igual a" );
printf( " s2\n" );
return 0;
}
Resultado:
Otras Funciones útiles para operar cadenas de caracteres.
No sólo string.h contiene funciones útiles para el tratamiento de cadenas. En ctype.h se encuentran unas funciones que permiten hacer cómodamente preguntas acerca de los caracteres, como si son mayúsculas, minúsculas, dígitos, etc:
Isalnum(caracter): devuelve cierto (un entero cualquiera distinto de cero) si caracter es una letra o dígito, y falso (el valor entero 0) en caso contrario.
isalpha(caracter): devuelve cierto si caracter es una letra, y falso en caso contrario.
isblank(caracter): devuelve cierto si caracter es un espacio en blanco o un tabulador.
isdigit(caracter) devuelve cierto si caracter es un digito, y falso en caso contrario.
isspace(caracter): devuelve cierto si caracter es un espacio en blanco, un salto de línea, un retorno de carro, un tabulador, etc., y falso en caso contrario.
islower(caracter): devuelve cierto si caracter es una letra minúscula, y falso en caso contrario.
isupper(caracter): devuelve cierto si caracter es una letra mayúscula, y falso en caso contrario.
toupper(caracter): devuelve la mayúscula asociada a caracter, si la tiene; si no, devuelve el mismo caracter.
tolower(caracter): devuelve la minúscula asociada a caracter, si la tiene; si no, devuelve el mismo caracter.
CONCLUSIONES.
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.
FUENTES DE INFORMACION.
www.fismat.umich.mx/mn1/manual/node18.htm En línea consultado el 29 de mayo de 2013
https://www.nebrija.es/~abustind/Informatica/MetodologiaI/Funciones_cadena.pdf En línea consultado el 29 de mayo de 2013