[ Foro de C ]

Problema con strstr

13-Dec-2011 19:46
bruno zelaia montero
2 Respuestas

Buenas profe! en un ejercicio tengo un problema con strstr, quiero comparar la cadena y cuando lo intento solo me devuelve null si el texto es completo, como si pusiera strcmp en vez de strstr..Aqui le dejo el programa que hice, para avanzar mas le comentare que es en el CASE 3 del SWITCH...(por ejemplo si pongo buscar manolo no me lo encuentra, si pongo manolo garcia si...por que?!)
PD:Hice otro programa en el cual era basicamente comparar un texto en un array y me funcionaba pero en structs no...que hago mal?!

#include <stdio.h>
#include <string.h>


struct duracion{
      int minutos;
      int segundos;
      };





struct      {
           char artista[80];
           char titulo[80];
           struct duracion time;
           int tamanyo;
           } cancion[100];
main()
{
int opcion=0;
char aux_nom[80];
int aux_num=0;
int i=0;
int v=0;
//menu//
do
    {
    printf("\n\nElija una de las siguientes opciones por favor:\n\n");
    printf("1. Anyadir nueva cancion\n\n");
    printf("2. Mostrar titulos de todas las canciones\n\n");
    printf("3. Buscar texto en en el artista o cancion\n\n");
    printf("4. Salir del programa\n\n");
    printf("Elija una opcion: ");
    scanf ("%d",&opcion);
    getchar();
    switch(opcion) //aqui empiezan las opciones y sus historias//
    {
    case 1:
          printf("Introduzca el nombre del artista\n\n");
          gets(aux_nom);
          strcpy(cancion[v].artista,aux_nom);
          printf("Introduzca el titulo de la cancion\n\n");
          gets(aux_nom);
          strcpy(cancion[v].titulo,aux_nom);
          printf("introduzca la duracion de la cancion minutos\n\n");
          scanf("%d",&cancion[v].time.minutos);
          printf("introduzca la duracion de la cancion (segundos restantes)\n\n");
          scanf("%d",&cancion[v].time.segundos);
          printf("Introduzca el tamanyo en KB\n\n");
          scanf("%d",&cancion[v].tamanyo);
          v++;
          break;
   
    case 2:
         printf("Aqui tienes todos los titulos introducidos actualmente ( %d de un max de 100 )\n\n",i);
         for (i=0;i<v;i++)
         {
         puts(cancion[i].artista);
         puts(cancion[i].titulo);
         printf("%d minutos y %d segundos\n\n", cancion[i].time.minutos,cancion[i].time.segundos);
         printf("%d \n\n", cancion[i].tamanyo);
         }
         break;
         
    case 3:
         printf("Introduce aqui el texto a buscar entre artistas y canciones\n\n");
         gets (aux_nom);
         for (i=0;i<v;i++)
         {
         if (strstr(aux_nom,cancion[i].artista)!=NULL)
            printf("El texto esta en la entrada numero %d del artista\n",i+1);
         if (strstr(aux_nom,cancion[i].titulo)!=NULL)
            printf("El texto esta en la entrada numero %d del titulo\n",i+1);
         }
         break;
         
         
         
    case 4:
         break;
   
    default:
         printf ("Por defecto:Opcion incorrecta, vuelve a intentarlo por favor\n");
         break;
    }    
}
while (opcion!=4);
}
     
    PD2:muchas gracias y disculpe las molestias, le agradezco de todo corazon todas las molestias que se toma por nosotros los estudiantes
   


15-Dec-2011 10:38
Nacho Cabanes (+31)

Es que estás usando "strstr" al revés: el primer parámetro debe ser la cadena en la que buscas y el segundo debe ser lo que esperas encontrar dentro de ella.

Mira aquí:

http://www.nachocabanes.com/c/referencia/detalle.php?funcion=strstr


15-Dec-2011 16:50
bruno zelaia montero

Muchas gracias, la dislexia acabará conmigo,gracias tanto por la solución como por la rapidez en la respuesta :D






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)