Rechercher : dans
Par :

[C] recherche chaine caractère

Dernière réponse le 21 avr 2008 à 09:28:41 joana, le 19 avr 2008 à 16:31:40 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [C] recherche chaine caractère » dans :
Langage C - Les chaînes de caractères Voir Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Les guillemets, apostrophes et les chaînes VoirComment jouer avec les guillemets et les apostrophes dans les chaînes 1. Préambule 2. Éviter une coupure dans la chaîne 3. Ajouter un guillemet dans la chaîne 3.1 Avec l'apostrophe 3.2 Avec l'ASCII 3.3 Directement 3.3.1 Méthode...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

daronmaster, le 19 avr 2008 à 16:36:47

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.

Répondre à daronmaster

2

joana, le 19 avr 2008 à 17:44:15

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

Répondre à joana

3

daronmaster, le 20 avr 2008 à 11:33:40

Peux-tu me donner la structure Pays ainsi que les fonctions affichepays et lireVchaine stp, merci

Répondre à daronmaster

4

joana, le 20 avr 2008 à 14:51:27

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

Répondre à joana

5

joana, le 20 avr 2008 à 14:56:01

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

Répondre à joana

6

daronmaster, le 20 avr 2008 à 18:22:00

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

Répondre à daronmaster

7

joana, le 20 avr 2008 à 23:41:52

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

Répondre à joana

8

mype, le 20 avr 2008 à 23:59:32

Comment tu rentres les pays dans la structure avant la recherche ?

Répondre à mype

9

 daronmaster, le 21 avr 2008 à 09:28:41

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

Répondre à daronmaster
Collection CommentÇaMarche.net