







Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
El uso de cadenas de caracteres en el lenguaje C, con un enfoque especial en la función scanf() y gets(). Se discuten los problemas que se pueden encontrar al utilizar scanf() para leer cadenas de texto y cómo gets() puede solucionarlos. Además, se presentan algunas funciones de la librería string.h que son útiles para manipular cadenas de caracteres.
Tipo: Diapositivas
1 / 13
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!








Facultad de Ciencias Informáticas
“Fundamentos de Programación”
scanf() Vs. gets para leer cadenas de caracteres
La función gets () pertenece a la misma librería de scanf(), solo puede obtener los datos para una variable de tipo cadena de texto (char), no puede ser utilizada para
obtener y transformar cantidades o datos calculables, es decir no admite variables de tipo (int, log, float o double), para su uso necesita que el buffer no este
seccionado, es decir no funciona después de usar un scanf(), esta función permite el ingreso ilimitado de caracteres desde el teclado.
El siguiente código fuente utiliza gets () para leer una cadena de texto, observe cuales serían los resultados de aplicarlo (este programa lo puede descargar con el
nombre string2.cpp ):
#include <stdio.h>
#include <stdlib.h>
main()
{ char frase[40];
system("cls");
printf("ingrese una frase:");
gets(frase);
printf("lo ingresado es:\n %s \n",frase);
system("pause");
return 0;
Dios perdona si te arrepientes
Al ingresar la frase: Dios perdona si te arrepientes
lo ingresado es:
Dios perdona si te arrepientes
Observe que toda la frase se ingresa a la variable, aquí el problema del uso del espacio no afecta el contenido del buffer
puts (cadena_caracteres): Esta función pertenece a la librería stdio.h , se la utiliza para mostrar cadenas de
caracteres, esta función a diferencia de printf() no necesita el uso del “\n”, ya que de forma automática produce
un salto de línea.
#include <stdio.h>
#include <stdlib.h>
void main()
{ char cadena[50];
system("cls");
puts("escriba su nombre y apellido:"); gets(cadena);
printf("eres afortunado:");
puts(cadena);
system("pause");
cadena
Gabriel Demera
Pantalla:
escriba su nombre y apellido:
eres afortunado:
Gabriel Demera
Press any keys to continue.
scanf () genera distribuciones y seccionamientos en el uso del buffer (memoria temporal entre el teclado y la RAM), que en el ejemplo C27A
observará que no funciona gets () después de utilizar scanf (), ya que se produce un seccionamiento en el buffer , C27B , gets () funciona ya que no
utiliza memoria seccionada y scanf () la secciona después:
#include <stdio.h>
#include <stdlib.h>
void main(){
char cadena[50];
int a;
system(“cls”);
printf(“ingrese un entero: “);
scanf(“%d”,&a);
printf(“ingrese otra cadena: “);
gets(cadena);
printf(“el entero ingresado es:%d\n”,a);
printf(“la cadena ingresada es:”);
puts(cadena);
system(“pause”);
C27A.cpp
Cuando se incluye la función printf ( ) y la función puts () en el mismo programa no afecta el normal desenvolvimiento del programa;
El problema surge al utilizar gets () y scanf (), el uso de la función gets () está limitada al ingreso de cadenas de caracteres , mientras que la función
scanf () es una instrucción mucho más amplia en cuanto a sus posibilidades en la que puede ser utilizada para diferentes tipos de datos,
cadena a Pantalla:
ingrese un entero:
ingrese otra cadena:
el entero ingresado es:
la cadena ingresada es:
123
123
Observe que no se ingresa la cadena de texto porque cuando se utiliza primero scanf()
y secciona el buffer no funciona gets() , es un error del cual no es responsabilidad del
programador.
memchr() memcmp() memcpy() memmove() memset() strcat() strchr()
strcmp() strcoll() strcpy() strcspn() strerror() strlen() strmcat()
strmcmp() strmcpy() strpbrk() strrchr() strspn() strstr() strtok()
strxfrm()
strlen (cadena_caracteres): Esta función devuelve el número de caracteres o la longitud de la cadena, sin tomar en cuenta el carácter de final de
cadena ‘\0’. Por ejemplo, suponga que se tienen dos cadenas de texto:
La función printf() devolverá como resultado:
strlen(c1) = 4
strlen(c2) = 37
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{char frase[100] ;
system("cls");
printf("ingrese una frase:");
gets( frase );
printf("lo ingresado es:\n %s \n", frase );
printf("la frase tiene %d caracteres\n",strlen( frase ));
system("pause");
return 0;
char c1[50] = "Dios";
char c2[] = "siempre perdona cuando te arrepientes";
Al aplicar la función strlen():
printf( "strlen(c1) = %d\nstrlen(c2) = %d\n", strlen(c1), strlen(c2) );
El siguiente código fuente permite el ingreso de una cadena de caracteres para volverla a mostrar indicando el número de caracteres ingresados (este programa lo
puede descargar con el nombre string3.cpp ):
frase
Pantalla:
ingrese una frase:
Nos preparamos para esta vida pero jamás para la próxima
Nos preparamos para esta vida pero jamás para la próxima
lo ingresado es:
Nos preparamos para esta vida pero jamás para la próxima
la frase tiene 56 caracteres
El conteo incluye también a los espacios
strcat ( cadena_destino , cadena_origen ). Esta función permite unir dos cadenas de texto en una sola, funciona concatenando el contenido de
cadena_origen al final de la cadena_destino, el resultado total quedará en cadena_destino.
Se mostrará el siguiente resultado
c1= Estudiar da frutos
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{char frase[100] , frase2[100 ]="usted piensa:";
system("cls");
printf("ingrese una frase:");
gets( frase );
printf("lo ingresado es:\n %s \n", frase );
printf("la frase tiene %d caracteres\n",strlen( frase ));
strcat( frase2 , frase );
printf("lo concatenado es:\n %s \n", frase2 );
system("pause");
return 0;
char c1[20] = "estudiar ";
char c2[11] = "da frutos";
Al aplicar la función:
strcat( c1, c2 );
Para mostrar la concatenación se utiliza:
printf( "c1=%s", c1 );
El siguiente código fuente permite unir dos cadenas de caracteres en una sola variable (este programa lo puede descargar con el nombre string5.cpp ):
frase
Pantalla:
ingrese una frase:
Muerte significa apartado de la fuente de vida que es Dios
Muerte significa apartado de la fuente de vida que es Dios
lo ingresado es:
Muerte significa apartado de la fuente de vida que es Dios
la frase tiene 58 caracteres
frase
Muerte significa apartado de la fuente de vida que es Dios
lo concatenado es:
usted piensa: Muerte significa apartado de la fuente de vida que es Dios
usted piensa:
strcmp ( cadena1 , cadena2 ) y strcmpi ( cadena1 , cadena2 ): Estas funciones reemplazan los operadores de comparación ( == , > , < ) para comparar
las cadenas de caracteres, funciona comparando cadena1 y cadena2 , se conoce la diferencia o la igualdad de las dos cadenas dependiendo del
resultado que arroja la función, el siguiente cuadro muestra los tres posibles resultados:
0 Que ambas cadenas de caracteres son iguales.
Mayor que 0 Que cadena 1 es mayor que cadena 2.
Menor que 0 Que cadena 1 es menor que cadena 2 o dicho de otra forma cadena 2 es mayor que cadena 1.
El resultado de este ejemplo es:
Son diferentes
El resultado de este ejemplo es:
Son iguales
Asumiendo que se tienen dos cadenas de caracteres inicializadas con la misma palabra, cual sería el resultado de compararlas:
Al comparar las cadenas de caracteres
if( strcmp(c1, c2 ) == 0 ) printf( "Son iguales" );
else printf( "Son diferentes" );
Al comparar las cadenas de caracteres
if( strcmpi(c1, c2 ) == 0 ) printf( "Son iguales" );
else printf( "Son diferentes" );
En este ejemplo la comparación se realiza mediante los
códigos, así el código de la A(65) es diferente de la a(97)
por eso el resultado es diferente
En este ejemplo la comparación se realiza mediante los
caracteres, así la A es igual a la a por eso el resultado es
igual