Funciones para cadenas en C. Longitud sizeof. string.h y strcpy, strlen, strcat, strcmp. Ejemplos. (CU00535F)

Resumen: Entrega nº35 del tutorial "Curso básico de programación en lenguaje C desde cero".
Codificación aprenderaprogramar.com: CU00535F

 

 

FUNCIONES PARA CADENAS EN LENGUAJE C

C no dispone de un tipo de dato String para trabajar con cadenas de texto como en otros lenguajes. En su lugar, una cadena está representada por un array de caracteres (char) habitualmente terminado con el carácter especial de fin de cadena << \0 >>. Este carácter especial no se visualiza por pantalla, podríamos decir que está pero es "transparente" o "no visible" a través de la pantalla.

logo lenguaje programacion C

 

Comentamos previamente que las funciones para pedir datos al usuario scanf y gets introducen automáticamente un fin de cadena (\0) al final del texto capturado. En estos casos el array de caracteres tiene en C un carácter adicional además del texto visible, el correspondiente al final de cadena. Por ejemplo la longitud en caracteres de la palabra “abc” introducida por el usuario con scanf o gets no es tres, sino cuatro, ya que a los tres caracteres hemos de sumarle el carácter especial de final de cadena representado con \0.

 

 

CONOCER LA LONGITUD DE UNA CADENA CON SIZEOF

Podemos declarar cadenas de varias maneras. Por ejemplo:

char pruebaCadena [3]; pruebaCadena [0]= 'a'; pruebaCadena [1]= 'b'; pruebaCadena [2]= 'c';

char pruebaCadena [] = "abc";

En el primer caso el array es de tres caracteres, el de índice cero es a, el de índice 1 es b, el de índice 2 es c. En el segundo caso el array es de cuatro caracteres al introducir C el carácter de fin de cadena \0.

Llamamos tamaño (length) de un array al número de elementos de que consta. En el caso del array de caracteres “abc” con el carácter de fin de cadena decimos que consta de 4 elementos (contando el carácter especial de fin de cadena). Podemos conocer la longitud de un array de caracteres usando la función sizeof, siendo la sintaxis a emplear: sizeof (nombreDelArray).

Escribe este código, que ya debemos ser capaces de comprender con lo estudiado hasta ahora.

#include <stdio.h>

#include <stdlib.h>

int main() {

    int i = 0; int j=0; char pruebaCadena [] = "abc";

    while (pruebaCadena[i] != '\0') { printf ("%c", pruebaCadena[i]); i=i+1; }

    printf ("%cUsando \\0: ", '\n');

    while (pruebaCadena[j] != '\0') { printf ("Iteracion %d - ", j+1); j=j+1; }

    printf ("%cUsando sizeof: ", '\n');

    j= 0; //Reinicializar j

    while (j < sizeof(pruebaCadena)) { printf ("Iteracion %d - ", j+1); j=j+1; }

    printf ("\nsizeof pruebaCadena es %d", sizeof(pruebaCadena));

    return 0; // Ejemplo aprenderaprogramar.com

}

 

 

Aquí mostramos distintas formas de recorrer un array de caracteres. La primera se basa en buscar el carácter de fin de cadena \0. En este ejemplo el bucle while recorre a – b – c (tres iteraciones). La segunda se basa en usar sizeof. En este ejemplo el bucle while recorre a – b – c - \0 (cuatro iteraciones).

 

 

LIBRERÍA STRING.H FUNCIONES STRCPY, STRLEN, STRCAT, STRCMP

A través de la librería string.h podemos usar distintas funciones relacionadas con cadenas. Para usar estas funciones debemos escribir #include <string.h> en cabecera de nuestro programa. A continuación relacionamos algunas de las funciones disponibles.

Función

Significado y ejemplo aprenderaprogramar.com

strcpy (arg1, arg2)

Copia arg2 en arg1. Ejemplo: strcpy (cadena, “control”);

strlen (arg1)

Devuelve la longitud del texto representado por arg1. Ejemplo: strlen(cadena1)

strcat (arg1, arg2)

Concatena las cadenas representadas por arg1 y arg2. Ejemplo: strcat(cadena1, “ unidades”)

strcmp (arg1, arg2)

Devuelve 0 si las cadenas representadas por arg1 y arg2 son iguales, o un valor menor que cero si arg1 precede alfabéticamente a arg2. Ejemplo: resComparacion = strcmp (cadena4, cadena2);

 

 

Escribe el siguiente código y comprueba los resultados de ejecución.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char cadena1 [] ="aprenderaprogramar.com"; char cadena2 [sizeof(cadena1)];
    char cadena3[] = " ok!";    char cadena4[50];
    int resComparacion;
    printf ("Cadena1 vale %s y Cadena2 vale %s \n", cadena1, cadena2);
    strcpy (cadena2, cadena1); //Copia cadena1 en cadena2
    printf ("Cadena1 vale %s y Cadena2 vale %s \n", cadena1, cadena2);
    printf ("Cadena1 tiene longitud %d (uno mas contando \\0) \n", strlen(cadena1));
    strcpy (cadena4, cadena1) ;
    printf ("Concatenacion %s \n", strcat(cadena4, cadena3));
    resComparacion = strcmp (cadena4, cadena2);
    printf ("Cadena1 vale %s y Cadena2 vale %s \n", cadena1, cadena2);
    printf ("Cadena3 vale %s y Cadena4 vale %s \n", cadena3, cadena4);
    if (resComparacion ==0) {
        puts ("Las cadenas 1 y 2 son iguales");
    }
    resComparacion = strcmp (cadena1, cadena3);
    if (resComparacion >0) {
        puts ("La cadena 1 precede alfabeticamente a la cadena 3");
    }
    return 0; // Ejemplo aprenderaprogramar.com
}

 

 

Nota: las cadenas en C no se pueden copiar escribiendo cadena1 = cadena2. En su lugar, debe usarse la función strcpy.

 

 

EJERCICIO Nº 1

Escribe un programa que pida tres cadenas al usuario y muestre su longitud (número de letras).

Ejemplo: el usuario introduce como cadenas perro, pez y cocodrilo. El programa mostrará por pantalla. El número de letras para perro es 5. El número de letras para pez es 3. El número de letras para cocodrilo es 9.

Para comprobar si tus respuestas son correctas puedes consultar en los foros aprenderaprogramar.com.

 

 

EJERCICIO Nº 2

Escribe un programa que pida tres cadenas al usuario y muestre el resultado de concatenar las dos primeras letras de las cadenas introducidas y que indique si las dos primeras cadenas son iguales.

Ejemplo: el usuario introduce como cadenas perro, vaca y cocodrilo. El programa mostrará por pantalla: “El resultado de concatenar las dos primeras letras de las cadenas es: pevaco. La primera cadena, perro, no es igual a la segunda cadena, vaca.”

Si el usuario introdujera perro, perro, mulo, el programa debería mostrar: “El resultado de concatenar las dos primeras letras de las cadenas es pepemu. La primera cadena, perro, es igual a la segunda cadena, perro.”

Para comprobar si tus respuestas son correctas puedes consultar en los foros aprenderaprogramar.com.

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

MARZO - ABRIL 2017

1. Java / J2EE
2. Entornos Oracle
3. JavaScript, jQuery
4. .NET, C#
5. Entornos SQL Server
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación