hola a todos!! / Duda sobre variable tipo bool

Iniciado por marcelitaaa, 4 Julio 2011, 17:46 PM

0 Miembros y 1 Visitante están viendo este tema.

marcelitaaa

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:

//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);
}

Dark Invader

Buenas,

Sería algo así:

#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: ");
   gets(s1);
   printf ("ingrese la cadena a buscar: ");
   gets(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");
       getchar();
   return 0;
}


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


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

Foxy Rider

#2
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 :

#define true 1
#define false 0

typedef int bool;


o sino, más acotado y correcto :

typedef enum{ false,true } bool;

Saludos.

marcelitaaa

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.

marcelitaaa

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!

Dark Invader

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

marcelitaaa

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

Dark Invader

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:

getchar();

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

Salu2

leogtz

Cita de: 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....

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


#include <stdio.h>
#include <stdbool.h>

int main(void)
{
    _Bool x = true;
    printf("%d\n", x);
    x = false;
    printf("%d\n", x);
    return 0;
}


gcc code.c -o code -std=c99
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Foxy Rider

#9
Guarda con c99 que no se si todos los compiladores lo tienen debidamente implementado (por lo menos en *nix), gcc se que no ... 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.