[C] recherche chaine caractère
joana
-
daronmaster Messages postés 326 Date d'inscription Statut Membre Dernière intervention -
daronmaster Messages postés 326 Date d'inscription Statut Membre Dernière intervention -
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:
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);
}
A voir également:
- [C] recherche chaine caractère
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere vide - Guide
5 réponses
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.
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.
peux-tu me donner la structure Pays ainsi que les fonctions affichepays et lireVchaine stp, merci
Oui bien sûr, les voici:
merci
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
correction
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);
}
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);
}
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
/* 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
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); }