Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: marcelitaaa en 4 Julio 2011, 17:46 pm



Título: hola a todos!! / Duda sobre variable tipo bool
Publicado por: marcelitaaa en 4 Julio 2011, 17:46 pm
Hola a todos! Soy Marcela y me presento. Tengo algunas dudas con C y me gustaría saber si me pueden dar una mano. Estoy estudiando C en la facultad y me dieron ejercicios, ya hice como 50 de elllos pero este no me funciona. Estoy trabajando en una ibook g4 con xcode y compilo en la terminal mediante gcc.
Si alguien me puede ayudar le estaré muy agradecida  :rolleyes:

Código:
//Escribir una función que reciba dos cadenas de caracteres denominadas "s1" y
//"s2" respectivamente, y verifique la existencia de la cadena s2 como subcadena
//integrante de la s1, retornando un token del tipo enumerativo bool por el nombre
//de la función (ver función strstr() de la biblioteca <string.h>).
//Prototipo: bool my_strstr (char *big, char *sub) ;
#include <stdio.h>
#include <string.h>
#define max 100
   
bool my_strstr (char*, char*);

int main()
{
   char s1[max],s2[max];
   bool conf;
   printf ("ingrese la cadena principal: ");
   scanf ("%s",s1);
   printf ("ingrese la cadena a buscar: ");
   scanf ("%s",s2);
   conf = my_strstr (s1,s2);
   if (conf == true)
       printf ("la primer cadena contiene a la segunda");
   else
       printf ("la primer cadena no contiene a la segunda");
   return 0;
}


bool my_strstr (char *big, char *sub)
{
   bool baby;
   if (strstr(big, sub) != NULL)
   {
       baby = true;
   }
   else
   {
       baby = false;
   }
   return (baby);
}


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: Dark Invader en 4 Julio 2011, 18:06 pm
Buenas,

Sería algo así:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define max 100
  4.  
  5. bool my_strstr (char*, char*);
  6.  
  7. int main()
  8. {
  9.   char s1[max],s2[max];
  10.   bool conf;
  11.   printf ("ingrese la cadena principal: ");
  12.   gets(s1);
  13.   printf ("ingrese la cadena a buscar: ");
  14.   gets(s2);
  15.   conf = my_strstr (s1,s2);
  16.   if (conf == true)
  17.       printf ("la primer cadena contiene a la segunda");
  18.   else
  19.       printf ("la primer cadena no contiene a la segunda");
  20.       getchar();
  21.   return 0;
  22. }
  23.  
  24.  
  25. bool my_strstr (char *big, char *sub)
  26. {
  27.   bool baby;
  28.   if (strstr(big, sub) != NULL)
  29.   {
  30.       baby = true;
  31.   }
  32.   else
  33.   {
  34.       baby = false;
  35.   }
  36.   return baby;
  37. }

Este ha sido un poco modificado,pero me funciona perfecto.Por cierto,si tienes que desarrollar una funcion como la de strtr¿te permiten utilizar el strstr en la funcion?¿No deberias crear una funcion sin recurrir a la funcion strstrt?

Porque entonces no le veo mucha utilidad al ejercicio  :huh:

Salu2


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: Foxy Rider en 4 Julio 2011, 18:12 pm
Fijate que si andás compilando con un compilador de C, el tipo de dato bool no existe (se usaba int), podés cambiarlo a eso o hacer algún parchesito pokeando con  typedef/enum/preprecesador para "implementarlo", más visible como :

Código
  1. #define true 1
  2. #define false 0
  3.  
  4. typedef int bool;
  5.  

o sino, más acotado y correcto :

Código
  1. typedef enum{ false,true } bool;

Saludos.


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: marcelitaaa en 4 Julio 2011, 18:25 pm
Gracias por las respuestas! Son muy amables! La verdad q es raro pero me pedían explicitamente usar la funcion strstr así q la usé. Muchas gracias DarkInvader.

Por otgro lado Vertex, me parece q tenés razón porque acabo de hacer un programa q define una variable tipo "bool" y  no compila  :-\. Lindo parchecito me pasaste, me encanta, gracias!

Ahora pruebo todo y les aviso.


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: marcelitaaa en 4 Julio 2011, 18:40 pm
Mil gracias! Ha funcionado! El parche que me has pasado Vertex es increible, pude cumplir con las consignas todas, me da mucha felicidad.

Te hago una pregunta Dark Invader, cuando utilizo "gets" me sale una leyenda q dice "this program uses gets(), which is unsafe."

Por qué me es inseguro usar gets? Hay alguna forma de usar otro tipo de funcion para introducir una cadena de texto la cual no sea insegura?

gracias!


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: Dark Invader en 4 Julio 2011, 18:51 pm
Gets es seguro,por lo menos siempre que lo he usado pero hay uno más seguro todavía que es el fgets, te dejo información:

http://c.conclase.net/librerias/?ansifun=fgets

En cuanto al código que puse me funciona bien,pero claro no había caído en tu compilador.

Salu2


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: marcelitaaa en 4 Julio 2011, 19:19 pm
Sos muy amable Dark Invader  ;D, me encantó, ya me estoy leyendo toda esa página, recien he visto que tiene un curso de c que esta genial ;-)

entonces la definicion de variables bool funciona en algunos compiladores y en otros no? no comprendí esa parte....


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: Dark Invader en 4 Julio 2011, 19:22 pm
Pues eso parece,las variables booleanas están definidas en el estandarte C++,por lo que un compilador que sea solo de C no la leerá,por eso hay que hacer una conversión de datos como te dijo el compañero vertex@Symphony.

Una última cosa,si quieres que tu código se lea bien,pon esto antes del return 0:

Código:
getchar();

Esta linea espera a que se pulse intro para finalizar,y podrás leer el programa entero.

Salu2


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: leogtz en 4 Julio 2011, 19:41 pm
Sos muy amable Dark Invader  ;D, me encantó, ya me estoy leyendo toda esa página, recien he visto que tiene un curso de c que esta genial ;-)

entonces la definicion de variables bool funciona en algunos compiladores y en otros no? no comprendí esa parte....

Puedes compilar con el estándar c99 y usar stdbool.h:


Código
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3.  
  4. int main(void)
  5. {
  6.    _Bool x = true;
  7.    printf("%d\n", x);
  8.    x = false;
  9.    printf("%d\n", x);
  10.    return 0;
  11. }
  12.  

Código:
gcc code.c -o code -std=c99


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: Foxy Rider en 4 Julio 2011, 20:30 pm
Guarda con c99 que no se si todos los compiladores lo tienen debidamente implementado (por lo menos en *nix), gcc se que no (http://gcc.gnu.org/c99status.html) ... es preferible evitarlo (stdbool está igualmente, pero dejo el warning). Además, solo se necesita el include y no cambiar el "bool"

Saludos.

PS: Curiosamente en FreeBSD ese header lo hicieron como la primer version que puse.


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: Queta en 4 Julio 2011, 21:50 pm
Aprovecho el post para comunicarles que Littlehorse modificó una de sus chinchetas e introdujo un enlace al documento C99. Es una buenísima fuente de información para situaciones como ésta:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf)


Título: Re: hola a todos!! / Duda sobre variable tipo bool
Publicado por: marcelitaaa en 5 Julio 2011, 17:41 pm
Claro, a mi c99 no me funcionó. Les agradezco por millones la data igualmente.