Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: versace123mx en Julio 08, 2014, 07:38:29 am

Título: Ayuda con comparacion de dos cadenas
Publicado por: versace123mx en Julio 08, 2014, 07:38:29 am
Hola que tal, tengo dos problemas que no he podido resolver, estoy leeiendo el libro programacion en C,C++, Java y Uml de Joyanes.
Pero me enconte con dos problemas y nadie me tira un hilo.

El primero de ellos es,sobre comparar una cadena, el problema dice.
Escribir un programa que acepte fechas escritas en modo usual y las visualie como tres numeros. Por ejemplo 15 febrero 2008
producira la salida 15 02 2008

Intente hacerlo con un Swtich pero el switch no acepte tipo char, entonces procedi a realizarlo con un if y el programa no me resuelve nada. lo he intentado con gets o scanf

Código: [Seleccionar]
#include<stdio.h>
int main()
{

    int dia,ano;
    char mes[5];

    printf("Ingresa mes: ");
    scanf("%s",mes);

    //gets(mes);

   if ( mes == 'En' )
   {
       printf("Son iguales");

   }else{
        printf("No son iguales");
   }

o  utilizando la funcion strcmp y nada.


 
Código: [Seleccionar]
if ( strcmp(mes,'En') == 0 )
   {
       printf("Son iguales");

   }else{
        printf("No son iguales");
   }


Y otro problema que enconte en dicho libro es hacerca de operadores de incremento y posincremento.
<a href='http://www.subirimagenes.com/otros-snap7672-8985843.html'><img src='http://s2.subirimagenes.com/otros/previo/thump_8985843snap7672.jpg' alt='subir imagenes' border='0'>[/url]

<a href='http://www.subirimagenes.com/otros-snap7728-8985845.html'><img src='http://s2.subirimagenes.com/otros/previo/thump_8985845snap7728.jpg' alt='subir imagenes' border='0'>[/url]

de antemano gracias.
Título: Re:Ayuda con comparacion de dos cadenas
Publicado por: C_printfer en Julio 08, 2014, 02:01:20 pm
Hola, de un vistazo principal te comento lo que veo:

Cuando comparas cadenas de caracteres, tienes que indicar al compilador que lo que quieres comparar realmente son cadenas de caracteres, es decir, los if quedarían de la siguiente manera:
if ( mes == "En" ) //comilla doble indica cadena, comilla simple caracter. Es decir, si hicieses if ( mes == 'E' ) sí sería correcto

No obstante, ahora mismo no recuerdo si C acepta comparar cadenas de caracteres con ==, se suele utilizar la función strcmp (como bien haces abajo). O bien, puedes hacer un bucle for y comparar carácter a carácter si ambas cadenas son iguales (lo que sería hacer la srcmp de forma manual).

Entiendo que eso debe solucionar el problema... Prueba y me cuentas. Aunque luego tendrías que seguir realizando código para cumplir con lo que te pide el enunciado.


Respecto a la última duda, entiendo que lo que preguntas es lo siguiente:
Si yo tengo una variable a=5 y hago que otra variable b=a--, entonces b vale 5, y a ahora vale 4. En cambio, si hago b=--a, a vale 4, y b también. O sea, si el -- ó el ++ se pone delante de la variable en alguna asignación o printf, quiere decir que el incremento o decremento se efectúa antes que la asignación.

Salu2! :P
Título: Re:Ayuda con comparacion de dos cadenas
Publicado por: xxx_jack_xxx en Julio 09, 2014, 10:00:47 am
Para darte cuenta de los signos ++ o -- delante o detras, depura este código

int main()
{
   int n,k,h;
   k=3;
   printf ("k=%d\n",k);
   n=k++;
   printf ("k=%d\n",k);
   printf ("n=%d\n",n);
   h=++k;
   printf ("h=%d\n",h);
   printf ("k=%d\n",k);
   return 0;
}
Me refiero a que lo ejecutes paso a paso y veas las variables una a una

Con respecto a la primer duda, el error esta en el scanf ya que los parametros a una matriz deben pasarse con el operador &, es decir, debes decirle donde empieza la matriz (el operador & da la posicion de memoria ). Existe una estrecha relacion entre punteros y matrices, esto es lo que te sucede, si haces gets(mes), creo q a la funcion le falta un parametro que son la cantidad de caracteres a leer. En fin, la sentencia debajo de el primer printf es
scanf("%s",&mes) ---> con &mes le decimos donde queremos que se guarde, ya que c puede trabajar sobre direcciones de memoria en el caso de matrices. Con esto lo que quiero decir es que si haces por ejemplo

int matriz [8];

El compilador crea un espacio en memoria para la matriz de 8 en una determinada direccion o posicion de memoria, cuando se ejecuta scanf debe saber a que posicion debe ir a guardar tus datos, la direccion de memoria se obtiene con el operado & (creo que se llama ampersand)


Bye suerte
Título: Re:Ayuda con comparacion de dos cadenas
Publicado por: Villano en Julio 14, 2014, 08:37:41 am
Código: [Seleccionar]
#include<stdio.h>
//deberias incluir strings.h
int main()
{

    int dia,ano;
    char mes[5];

    printf("Ingresa mes: ");
    scanf("%s",mes);//lo que necesita scanf es una direccion de memoria. Esta bien pero mejor usa
   //fgets(mes,5,stdin) para que lea solo 5 caracteres... lee los numeros 22 y 23 sobre bugs y exploits y te //daras cuenta

    //gets(mes);

   if ( mes == 'En' )//error, se usa strcmp(mes,"En"); las comillas simples y las dobles significan distintas //cosas en C
   {
       printf("Son iguales");

   }else{
        printf("No son iguales");
   }

En cuanto a los de las comillas dobles y simples tal vez los compiladores actuales lo dejen pasar al igual q las librerias, las comillas simples se usan para indicar 1 solo caracter mientras las comillas dobles se usan para indicar una cadena o "string".