322cadenas de Caracteres

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

República Bolivariana de Venezuela

Ministerio del Poder Popular para la Educación Universitaria


Universidad Politécnica Territorial de Estado Mérida Kleber Ramírez
Núcleo Tucani Edo Mérida

CADENAS DE
CARACTERES

Profesor(a): Alumno(a):
Mia khalifa Michell Manzanillo
INTRODUCCIÓN

En el lenguaje C, los strings o cadenas de caracteres tienen algunas


particularidades:
· No existen en C como un tipo de dato nativo del lenguaje, sin embargo...
· Se materializan mediante arreglos unidimensionales de tipo char, como por
ejemplo: char string[20];
· Se agrega un carácter delimitador que permite conocer “hasta donde llegan
los datos del string dentro del arreglo”. Ese carácter es conocido como
carácter nulo y se representa como (char)0 ó bien ‘\0’ ó simplemente el
número 0.
· Si no existe el delimitador, entonces el arreglo de char no se considera como
un string sino como un simple arreglo de caracteres.
CADENAS DE CARACTERES (DEFINICIÓN)
Las cadenas de caracteres son vectores de tipo carácter (char) que reciben un
tratamiento especial para simular el tipo de datos “string”, presente en otros
lenguajes de programación. Para que un vector de caracteres pueda ser
considerado como una cadena de caracteres, el ´ultimo de los elementos útiles
del vector debe ser el carácter nulo (código ASCII 0). Según esto, si se quiere
declarar una cadena formada por N caracteres, deberá declararse un vector con
N + 1 elementos de tipo carácter. Por ejemplo, la declaración char cadena[6];
reserva suficiente espacio en memoria para almacenar una cadena de 5
caracteres, como la palabra "casco":

En C pueden definirse constantes correspondientes a cadenas de caracteres. Se


usan comillas dobles para delimitar el principio y el final de la cadena, a
diferencia de las comillas simples empleadas con las constantes de tipo
carácter. Por ejemplo, la cadena constante "H" tiene muy poco que ver con el
carácter constante ’H’, si observamos la representación interna de ambos:
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;
}
Operaciones con cadenas:
Entrada/salida de cadenas.

Las cadenas se muestran con printf y la adecuada marca de formato sin que se
presenten dificultades especiales. Lo que sí resulta problemático es leer
cadenas. La función scanf presenta una seria limitación: solo puede leer
((palabras)), no ((frases)). Ello nos obliga a presentar una nueva función
(gets).

Salida con printf:

Empecemos por considerar la función printf, que muestra cadenas con la


marca de formato %s. Aquí se tiene un ejemplo de uso:

#include <stdio.h>
#define MAXLON 80
int main()
{
char cadena[MAXLON+1] = "una cadena";

printf ("El valor de cadena es %s.\n", cadena);


return 0;
}

El resultado es el siguiente:

Se puede alterar la presentación de la cadena con modificadores:

#include <stdio.h>
#define MAXLON 80
int main() {
char cadena[MAXLON+1] = "una cadena";

printf("El valor de cadena es (%s).\n", cadena);


printf("El valor de cadena es (%20s).\n", cadena);
printf("El valor de cadena es (%-20s).\n", cadena);
return 0;
}

Teniendo como resultado:

Si se desea mostrar una cadena carácter a carácter, se Puede hacer llamando a


printf sobre cada uno de los caracteres, pero debe recordar que la marca de
formato asociada a un carácter es %c:

#include <stdio.h>
#define MAXLON 80
int main(void) {
char cadena[MAXLON+1] = "una cadena";

int i;
i = 0;
while (cadena[i] != ’\0’) {
printf ("%c\n", cadena[i]);
i++;
}
return 0;
}

Este es el resultado de la ejecución:


Entrada con scanf:

La función scanf es un reto mayor. He aquí un ejemplo que pretende leer e


imprimir una cadena en la que podemos guardar hasta 80 caracteres (sin
contar el terminador nulo):

#include <stdio.h>
#define MAXLON 80
int main(void) {
char cadena[MAXLON+1];

printf ("Introduce una cadena: ");


scanf ("%s", cadena);
printf ("La cadena leída es %s\n", cadena);
return 0;
}

Debe notar que con las cadenas no hay que poner el caracter & del
identificador al usar scanf. Recordar: cadena[0] es un char, pero cadena, sin
mas, es la dirección de memoria en la que empieza el vector de caracteres. Al
ejecutar el programa introduciendo la cadena "una" se obtiene el siguiente
resultado por pantalla.
Hay un problema práctico con scanf: solo lee una (palabra), es decir, una
secuencia de caracteres no blancos. Si al ejecutar el programa tecleamos un
par de palabras (una prueba), sólo se muestra la primera. Por pantalla se
obtendría lo siguiente:

Entrada con gets:

La función gets lee todos los caracteres que hay hasta encontrar un salto de
línea. Dichos caracteres, excepto el salto de línea, se almacenan a partir de la
dirección de memoria que se indique como argumento y se añade un
terminador.

#include <stdio.h>
#define MAXLON 11
int main(void)
{
char a[MAXLON+1], b[MAXLON+1];

printf ("Introduce una cadena: "); gets(a);


printf ("Introduce otra cadena: "); gets(b);
printf ("La primera es %s y la segunda es %s\n", a, b);
return 0;
}

Este es el resultado de la ejecución:


Entrada con sscanf:

La función sscanf es similar a scanf (se diferencia en la ((s)) inicial), pero no


obtiene información leyéndola del teclado, sino que la extrae de una cadena.
Un ejemplo para entender el procedimiento:

#include <stdio.h>
#define MAXLINEA 80
#define MAXFRASE 40
int main()
{
int a, b;
char frase[MAXFRASE+1];
char linea[MAXLINEA+1];

printf ("Dame el valor de un entero:");


gets(linea); sscanf (linea, "%d", &a);
printf ("Introduce ahora una frase:");
gets(frase);
printf ("Y ahora, dame el valor de otro entero:");
gets(linea); sscanf (linea, "%d", &b);
printf ("Enteros leídos: %d, %d.\n", a, b);
printf ("Frase leída: %s.\n", frase);
return 0;
}

En el programa se ha definido una variable auxiliar, linea, que es una cadena


con capacidad para 80 caracteres mas el terminador (puede resultar
conveniente reservar mas memoria para ella en según que aplicación). Cada
vez que deseamos leer un valor escalar, leemos en línea un texto que introduce
el usuario y obtenemos el valor escalar (numérico) con la función sscanf.
Dicha función recibe, como primer argumento, la cadena en línea; como
segundo, una cadena con marcas de formato; y como tercer parámetro, la
dirección de la variable escalar en la que queremos depositar el resultado de la
lectura.

Este es el resultado:

Escritura en cadenas sprintf:

Hay una función que puede simplificar notablemente la creación de cadenas


cuyo contenido se debe calcular a partir de uno o mas valores: sprintf ,
disponible incluyendo la cabecera stdio.h (se trata, en cierto modo, de la
operación complementaria de sscanf ). La función sprintf se comporta como
printf , salvo por un ((detalle)): no escribe texto en pantalla, sino que lo
almacena en una cadena.

Ejemplo:

#include <stdio.h>
#define MAXLON 80
int main(void)
{
char a[MAXLON+1] = "una";
char b[MAXLON+1] = "cadena";
char c[MAXLON+1];

sprintf (c, "%s %s", a, b);


printf ("%s\n", c);
return 0;
}

Si se ejecuta el programa mostrara por pantalla…


Asignación y copia de cadenas:

Para efectuar una copia de una cadena, has de hacerlo carácter a carácter, o en
su defecto usar las función strcpy correspondiente incluidas en <string.h>

#include <string.h>
#define MAXLON 10 ***
int main()
{
char original[MAXLON+1] = "cadena";
char copia[MAXLON+1];
int i;

for (i = 0; i <= MAXLON; i++)


copia[i] = original[i];
return 0;
}

Se Debe notar que el bucle recorre los 10 caracteres que realmente hay en
original pero, de hecho, solo se requieren copiar los caracteres que hay hasta
el terminador, incluyéndole a él.

#define MAXLON 10
int main()
{
char original[MAXLON+1] = "cadena";
char copia[MAXLON+1];
int i;

for (i = 0; i <= MAXLON; i++) {


copia[i] = original[i];
if (copia[i] == ’\0’)
break;
}
return 0;
}

Este sería el resultado:

Longitud de una cadena:

El convenio de terminar una cadena con el carácter nulo permite conocer


fácilmente la longitud de una cadena:

#include <stdio.h>
#define MAXLON 80
int main(void)
{
char a[MAXLON+1];
int i;

printf ("Introduce una cadena (max. %d cars.): ", MAXLON);


gets(a);
i = 0;
while (a[i] != ’\0’) i++;
printf ("Longitud de la cadena: %d\n", i);
return 0;
}

Calcular la longitud de una cadena es una operación frecuentemente utilizada,


así que está predefinida en la biblioteca de tratamiento de cadenas <string.h>
(strlen). Acá un ejemplo de conteo de caracteres usando strlen (conteo de
vocales minúsculas) leída la cadena desde teclado.

#include <stdio.h>
#include <string.h>
#define MAXLON 80
int main()
{
char a[MAXLON+1];
int i, contador=0, longitud;

printf ("Introduce una cadena (max. %d cars.): ",MAXLON); gets(a);


longitude = strlen(a);
for (i = 0; i < longitud; i++)
if (a[i] == ’a’ || a[i] == ’e’ || a[i] == ’i’ || a[i] == ’o’ ||
a[i] == ’u’)
contador++;
printf ("Vocales minúsculas: %d\n", contador);
return 0;
}

Concatenación:

En C existe la posibilidad de concatenar cadenas con bucles. Este programa,


por ejemplo, pide dos cadenas y concatena la segunda a la primera:

#include <stdio.h>
#define MAXLON 80
int main(void)
{
char a[MAXLON+1], b[MAXLON+1];
int longa, longb;
int i;

printf ("Introduce un texto (max. %d cars.): ", MAXLON);


gets(a);
printf ("Introduce otro texto (max. %d cars.): ", MAXLON);
gets(b);
longa = strlen(a);
longb = strlen(b);
for (i=0; i<longb; i++)
a[longa+i] = b[i];
a[longa+longb] = ’\0’;
printf ("Concatenación de ambos: %s", a);
return 0;
}

Escribamos como ejemplo "casa grande" y veamos lo que pasa:

También podría gustarte