Autor Tema: Funciones para cadenas en C. Longitud sizeof string.h strcpy LenguajeC CU00535  (Leído 3990 veces)

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Buenas noches amigos os dejo una posible solución e los ejercicios de la lección CU00535F del tutorial de programación online de C.

Citar
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.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  typedef char tipoCadenas[50];
  tipoCadenas cadenas[3];
  int i = 0;

  while (cadenas < 3){
    printf("\nIntroduzca una cadena de texto: ");
    gets(cadenas[i]);
    i=i+1;
  }
  puts("");
  while (cadenas < 3){
    printf("\n\tEl n%cumero de letras de la cadena %d, \"%s\" es %d letras.\n", cadenas[i],strlen(cadenas[i]));
    i=i+1;
  }
  return 0;

}

Citar
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.”

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    typedef char tipoCadenas[50];
    tipoCadenas cadenas[3];
    tipoCadenas ultimacadena[3];
    int i = 0;
    int j = 0;
    int resComparacion = 0;

    for (i=0; i < 3; i++) // Se piden las 3 cadenas de texto
    {
        printf("\nIntroduzca una cadena de texto:");
        gets(cadenas[i]);
    }
    while (cadenas < 3)   //Se recuperan las dos primeras letras de cada cadena de texto y se guardan en una variable
    {
        i++;
        while (cadenas < 3)
        {
            j++;
            if (j == 2)
            {
                ultimacadena[i][j]= '\0'; //después de recuperar las dos letras, introducimos el final de la cadena
            }
            else
            {
                ultimacadena[i][j] = cadenas[i][j];
            }
        }
    }
    printf("\nEl resultedo de concatenar las dos primeras letras de las cadenas es: \"%s\". \n\n", strcat(strcat(ultimacadena[0],ultimacadena[1]),ultimacadena[2]));
    if (resComparacion == 0)
    {
        printf("La primera cadena \"%s\", es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    else
    {
        printf("La primera cadena \"%s\", no es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    return 0;
}


Saludos   :D
« Última modificación: 24 de Junio 2016, 22:07 por César Krall »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Pandemia.

El primer ejercicio no funciona. En la condición del "while" pones "cadenas < 3". Esto no es válido. Deberías empezar cambiando eso.

En el segundo ejercicio te pasa algo parecido, además la comparación de cadenas que pide el segundo apartado de este ejercicio no la realizas por ningún sitio.

Saludos. ;D

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Menudos fallos de principiante y me ha costado verlo, hasta que me he dado cuenta que me había confundido en los contadores, gracias por la corrección, para otra estaré mas atento, pongo los códigos nuevos por si a caso hay alguna cosilla. gracias por tu tiempo.

Ejercicio 1.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  typedef char tipoCadenas[50];
  tipoCadenas cadenas[3];
  int i = 0;

  while (i < 3;){
    printf("\nIntroduzca una cadena de texto: ");
    gets(cadenas[i]);
    i=i+1;
  }
  puts("");
  while (i < 3){
    printf("\n\tEl n%cumero de letras de la cadena %d, \"%s\" es %d letras.\n", 163,i+1,cadenas[i],strlen(cadenas[i]));
    i = i +1;
  }
  return 0;

}


Ejercicio 2.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    typedef char tipoCadenas[50];
    tipoCadenas cadenas[3];
    tipoCadenas ultimacadena[3];
    int i = 0;
    int j = 0;
    int resComparacion = 0;

    for (i=0; i < 3; i++) // Se piden las 3 cadenas de texto
    {
        printf("\nIntroduzca una cadena de texto:");
        gets(cadenas[i]);
    }
    while (i < 3)   //Se recuperan las dos primeras letras de cada cadena de texto y se guardan en una variable
    {
        i++;
        while (j < 3)
        {
            j++;
            if (j == 2)
            {
                ultimacadena[i][j]= '\0'; //después de recuperar las dos letras, introducimos el final de la cadena
            }
            else
            {
                ultimacadena[i][j] = cadenas[i][j];
            }
        }
    }
    printf("\nEl resultedo de concatenar las dos primeras letras de las cadenas es: \"%s\". \n\n",
            strcat(strcat(ultimacadena[0],ultimacadena[1]),ultimacadena[2]));
            resComparacion = strcmp(cadenas[0], cadenas[1]);
    if (resComparacion == 0)
    {
        printf("La primera cadena \"%s\", es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    else
    {
        printf("La primera cadena \"%s\", no es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    return 0;
}


Saludos.  ;D

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
En el ejercicio 1, si no pones el contador a cero después de la ejecución del primer while, no te entrará en el segundo while.

En el ejercicio 2 sigue habiendo cosas mal, te pasa igual que en el anterior ejercicio, si después de acabar el bucle for no inicialízas a cero el contador no se entrará en el bucle while.
Dentro del bucle while, en la primera línea usas "i++;", por lo cual los índices irán adelantados y solo acabarás cogiendo las dos primeras letras de las dos últimas palabras introducidas y no de las tres.
Te pasa lo mismo con el segundo contador que usas, "j++;", esta línea debe de ir al final del bucle y una vez que se salga del bucle deberías de inicializar su valor a cero para que se pueda volver a entrar en el bucle, sino, solo entrará una vez.

El código de la parte del bucle debería quedarte así:

Código: [Seleccionar]
    i=0;
    while (i < 3) {
        while (j < 3)  {
            if (j == 2) {
                ultimacadena[i][j]= '\0';
            } else {
                ultimacadena[i][j] = cadenas[i][j];
            }
            j++;
        }
        j=0;
        i++;
    }

Saludos. ;D

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Gracias , por sacarme de las dudas, con esta explicación me has aclarado muchas, nunca había programado antes y la verdad es que ahora me apasiona este mundillo, estoy aprendiendo todo lo que puedo y tu me estas ayudando mucho....

te pongo otra vez los ejercicios para que veas los cambios que ahora creo que son los acertados.

ejercicio 1.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  typedef char tipoCadenas[50];
  tipoCadenas cadenas[3];
  int i = 0;

  while (i < 3){
    printf("\nIntroduzca una cadena de texto: ");
    gets(cadenas[i]);
    i=i+1;
  }
  i=0;
  puts("");
  while (i < 3){
    printf("\n\tEl n%cumero de letras de la cadena %d, \"%s\" es %d letras.\n", 163,i+1,cadenas[i],strlen(cadenas[i]));
    i = i +1;
  }
  return 0;

}



Ejercicio 2.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    typedef char tipoCadenas[50];
    tipoCadenas cadenas[3];
    tipoCadenas ultimacadena[3];
    int i = 0;
    int j = 0;
    int resComparacion = 0;

    for (i=0; i < 3; i++) // Se piden las 3 cadenas de texto
    {
        printf("\nIntroduzca una cadena de texto:");
        gets(cadenas[i]);
    }
    i = 0;
    while (i < 3)   //Se recuperan las dos primeras letras de cada cadena de texto y se guardan en una variable
    {

        while (j < 3)
        {

            if (j == 2)
            {
                ultimacadena[i][j]= '\0'; //después de recuperar las dos letras, introducimos el final de la cadena
            }
            else
            {
                ultimacadena[i][j] = cadenas[i][j];
            }
          j++;
        }
      j=0;
      i++;
    }
    i = 0;
    printf("\nEl resultedo de concatenar las dos primeras letras de las cadenas es: \"%s\". \n\n",
            strcat(strcat(ultimacadena[0],ultimacadena[1]),ultimacadena[2]));
            resComparacion = strcmp(cadenas[0], cadenas[1]);
    if (resComparacion == 0)
    {
        printf("La primera cadena \"%s\", es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    else
    {
        printf("La primera cadena \"%s\", no es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    return 0;
}


Saludos y gracias por tu tiempo...  ;)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
El ejercicio 1 todo bien.

En el ejercicio 2 te sobra la última linea en la que iguales i a cero, puesto ya no lo vas a usar después, de poco sirve inicializar i de nuevo.

Así que ya puedes dar por concluido este ejercicio, a no ser que te quede alguna duda más.

Saludos. ;D

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Ok, tienes razón esa i ya no va le de nada, ya me queda to claro, gracias por todo.

Saludos, de todas formas dejo el ejercicio retocado.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    typedef char tipoCadenas[50];
    tipoCadenas cadenas[3];
    tipoCadenas ultimacadena[3];
    int i = 0;
    int j = 0;
    int resComparacion = 0;

    for (i=0; i < 3; i++) // Se piden las 3 cadenas de texto
    {
        printf("\nIntroduzca una cadena de texto:");
        gets(cadenas[i]);
    }
    i = 0;
    while (i < 3)   //Se recuperan las dos primeras letras de cada cadena de texto y se guardan en una variable
    {

        while (j < 3)
        {

            if (j == 2)
            {
                ultimacadena[i][j]= '\0'; //después de recuperar las dos letras, introducimos el final de la cadena
            }
            else
            {
                ultimacadena[i][j] = cadenas[i][j];
            }
          j++;
        }
      j=0;
      i++;
    }

    printf("\nEl resultedo de concatenar las dos primeras letras de las cadenas es: \"%s\". \n\n",
            strcat(strcat(ultimacadena[0],ultimacadena[1]),ultimacadena[2]));
            resComparacion = strcmp(cadenas[0], cadenas[1]);
    if (resComparacion == 0)
    {
        printf("La primera cadena \"%s\", es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    else
    {
        printf("La primera cadena \"%s\", no es igual a la segunda cadena \"%s\".\n", cadenas[0],cadenas[1]);
    }
    return 0;
}


Saludos...  ;D

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".