[C] recherche chaine caractère

Bonjour,

comment faire pour rechercher chaine de caractère dans une structure en langage c?

quand il n'y a aucun pays ça fonctionne mais dés que j'en encode un puis que je le recherche, il me dit qu'il n'a pas pu être trouvé.

voici mon code:

short RechercheParNom (struct Pays*p) //par pays

{
	
	int j,i;
	short trouve=0;
	char NomPays[30];
	

	printf("Recherche d'un Pays\n");
	printf("________________________\n\n");

	printf("Entrez le nom a rechecher : ");
	j=LireVChaine(NomPays,30);	
	Majuscule(&NomPays[0]);


	for(j=0;j<30 && trouve==0;j++,i++)
	{
		
		
		if(strcmp(p->NomPays,NomPays)==0)
		{
			trouve=1;
		}
	}


if(j==30 && trouve==0)
		j=0;

	if (trouve==1)
	{
		AffichePays(p);
	}
	else
	{
		printf("\nLe Pays recherche n'a pu etre trouve");
	}
	
	return (j-1);
}
Configuration: Windows XP
Firefox 2.0.0.13

5 réponses

  1. dans :

    for(j=0;j<30 && trouve==0;j++,i++)
    {

    if(strcmp(p->NomPays,NomPays)==0)
    {
    trouve=1;
    }
    }

    a quoi servent tes indices ? ou plutot a quoi sert cette boucle ?

    un strcmp ne suffit-il pas ? entre p->NomPays et NomPays ?

    strcmp compare deux chaine donc je ne vois l'utilité de ta boucle.

    0
    1. bonjour,

      j'avais essayer sans boucle aussi et ça donne le même résultat, il ne trouve pas le pays malgré qu'il y en a d'encoder.
      il y a surement une erreur mais je n'arrive pas à la trouver...

      short RechercheParNom (struct Pays*p) //par pays
      
      {
      	
      	int j,i;
      	short trouve=0;
      	char NomPays[30];
      	
      
      	printf("Recherche d'un Pays\n");
      	printf("________________________\n\n");
      
      	printf("Entrez le nom a rechecher : ");
      	j=LireVChaine(NomPays,30);	
      	Majuscule(&NomPays[0]);
      
      
      	
      		
      		
      		if(strcmp(p->NomPays,NomPays)==0)
      		{
      			trouve=1;
      		}
                
              if(j==30 && trouve==0)
      		j=0;
      
      	if (trouve==1)
      	{
      		AffichePays(p);
      	}
      	else
      	{
      		printf("\nLe Pays recherche n'a pu etre trouve");
      	}
      	
      	return (j-1);
      }
      0
  2. peux-tu me donner la structure Pays ainsi que les fonctions affichepays et lireVchaine stp, merci
    0
    1. Oui bien sûr, les voici:

      struct Pays{
      	intNumPays;
      	char   NomPays[20];
               int   NombreHab;
      	
      };
      
      int LireVChaine (char *p,short nb)
      {
      	int i=0;
      	char *g;
      
      	fflush(stdin);
      
      	g=p;
      
      	do
      	{
      		*g=getchar();
      		i++;
      		g++;
      	}while (*(g-1)!='\n' && i < nb);
      	*(g-1)='\0';
      	
      	Majuscule(p);
      	
      
      	return (i);
      }
      
      void AffichePays(struct Pays*p)
      
      {
      	system("cls");
      	printf("\n%d",p->NumPays);
      	printf("%s",->NomPays);
      	printf("%d",->NombreHab);
      }


      merci
      0
    2. @joanacorrection

      struct Pays{
      int NumPays;
      char NomPays[20];
      int NombreHab;

      };


      int LireVChaine (char *p,short nb)
      {
      int i=0;
      char *g;

      fflush(stdin);

      g=p;

      do
      {
      *g=getchar();
      i++;
      g++;
      }while (*(g-1)!='\n' && i < nb);
      *(g-1)='\0';

      Majuscule(p);

      return (i);
      }

      void AffichePays(struct Pays*p)

      {
      system("cls");
      printf("\n%d",p->NumPays);
      printf("%s",p->NomPays);
      printf("%d",p->NombreHab);
      }
      0
  3. pourquoi ne pas utilisé un bon vieux scanf("%s",p) ? et tes chaine ne sont pas de meme taille une est à 20 et une autre est à 30, pb de cohérence
    0
    1. j'ai modifier pour les tailles et j'ai essayer avec scanf mais il me dit qu'il ne trouve pas bien que j'ai encodé précemment, il doit y avoir une erreur mas je ne trouve pas...
      0
  4. comment tu rentres les pays dans la structure avant la recherche ?
    0
    1. voila ce que je ferai (le pb vient certainement que tu joue avec des tableau non alloué dynamiquement):

      /* dans ta structure :

      char *NomPays; et pas char NomPays[30];

      */

      char s[256];

      scanf("%s",s);//tu saisies le nom du pays

      c->NomPays = (char *)malloc(sizeof(char)*(strlen(s)+1)); //allocation dynamique d'un tableau de char

      strcpy(c->NomPays,s); //copie de s dans c->NomPays

      //et voila cela devrait marcher enfin j'en suis quasi sur
      // ensuite fais un strcmp et ok qd le resultat est à 0.

      bon courage pour la suite
      0