Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pandemia en 15 de Junio 2016, 21:24

Título: Funciones para cadenas en C. Longitud sizeof string.h strcpy LenguajeC CU00535
Publicado por: Pandemia en 15 de Junio 2016, 21:24
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
Título: Re:LenguajeC CU00535F Funciones para cadenas en C. Longitud sizeof string.h strcpy
Publicado por: pedro,, en 17 de Junio 2016, 15:08
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
Título: Re:LenguajeC CU00535F Funciones para cadenas en C. Longitud sizeof string.h strcpy
Publicado por: Pandemia en 19 de Junio 2016, 15:53
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
Título: Re:LenguajeC CU00535F Funciones para cadenas en C. Longitud sizeof string.h strcpy
Publicado por: pedro,, en 19 de Junio 2016, 23:34
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
Título: Re:LenguajeC CU00535F Funciones para cadenas en C. Longitud sizeof string.h strcpy
Publicado por: Pandemia en 20 de Junio 2016, 22:09
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...  ;)
Título: Re:LenguajeC CU00535F Funciones para cadenas en C. Longitud sizeof string.h strcpy
Publicado por: pedro,, en 21 de Junio 2016, 11:13
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
Título: Re:LenguajeC CU00535F Funciones para cadenas en C. Longitud sizeof string.h strcpy
Publicado por: Pandemia en 21 de Junio 2016, 20:44
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