[C] Chaine de caracteres
Résolu/Fermé
01nul
-
23 déc. 2009 à 15:28
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 24 déc. 2009 à 14:33
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 24 déc. 2009 à 14:33
A voir également:
- [C] Chaine de caracteres
- Caractères ascii - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Plus de chaine tv - Guide
10 réponses
{psycho.}
Messages postés
101
Date d'inscription
mardi 22 décembre 2009
Statut
Membre
Dernière intervention
4 septembre 2010
8
23 déc. 2009 à 17:13
23 déc. 2009 à 17:13
Mmm, un peu plus de détails, le fichier complet, ou au moins la déclaration de ton tableau de structures?
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
23 déc. 2009 à 22:34
23 déc. 2009 à 22:34
char chaine[] = Tpers[i].numero;
C'est sûr que cela va probablement poser un problème ;-)
Peut-être me trompè-je ? Mais pour moi il y a deux solutions:
- soit Tpers[i].numero est un entier et je pense que le compilateur ne doit pas pousuivre son travail,
- soit Tpers[i].numero est une 'chaîne et je ne serais pas surpris que le compilateur ne poursuivre pas son travail.
En clair, il faudrait que l'on en sache un peu plus sur Tpers[i].numero.
Bonne continuation.
C'est sûr que cela va probablement poser un problème ;-)
Peut-être me trompè-je ? Mais pour moi il y a deux solutions:
- soit Tpers[i].numero est un entier et je pense que le compilateur ne doit pas pousuivre son travail,
- soit Tpers[i].numero est une 'chaîne et je ne serais pas surpris que le compilateur ne poursuivre pas son travail.
En clair, il faudrait que l'on en sache un peu plus sur Tpers[i].numero.
Bonne continuation.
Bonjour et merci de votre implication.
Un extrait de mon tableau Tpers :
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"}
...
Et voici la structure :
typedef struct personne{
char nom[LG_MAX]; /* nom de la personne */
char prenom[LG_MAX]; /* prénom de la personne */
char numero[LG_INSEE+1];/* numéro de la personne */
} PERS;
Je suis toujours bloqué sur le problème.
Tpers[i].numero n'est pas un entier, c'est une chaine. Et j'aimerais que chaque caractère de cette chaine se retrouve dans mon tableau chaine[]...
Un extrait de mon tableau Tpers :
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"}
...
Et voici la structure :
typedef struct personne{
char nom[LG_MAX]; /* nom de la personne */
char prenom[LG_MAX]; /* prénom de la personne */
char numero[LG_INSEE+1];/* numéro de la personne */
} PERS;
Je suis toujours bloqué sur le problème.
Tpers[i].numero n'est pas un entier, c'est une chaine. Et j'aimerais que chaque caractère de cette chaine se retrouve dans mon tableau chaine[]...
Bonjour et merci pour votre implication !
Voici mon tableau Tpers :
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"},
Et voici ma structure :
typedef struct personne{
char nom[LG_MAX]; /* nom de la personne */
char prenom[LG_MAX]; /* prénom de la personne */
char numero[LG_INSEE+1];/* numéro de la personne */
} PERS;
Tpers[i].numero est donc une chaine et non un entier. Je voudrai que chaque caractère de cette chaine se retrouve dans mon tableau chaine[]...
Voici mon tableau Tpers :
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"},
Et voici ma structure :
typedef struct personne{
char nom[LG_MAX]; /* nom de la personne */
char prenom[LG_MAX]; /* prénom de la personne */
char numero[LG_INSEE+1];/* numéro de la personne */
} PERS;
Tpers[i].numero est donc une chaine et non un entier. Je voudrai que chaque caractère de cette chaine se retrouve dans mon tableau chaine[]...
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
24 déc. 2009 à 14:33
24 déc. 2009 à 14:33
J'arrive sans doute après la bataille... mais je vais glisser un grain de sel. Le n° INSEE peut parfaitement se traiter comme un entier (par exemple un 'long long int' de 8 octets), ce qui permet une comparaison beaucoup plus simple. Tout dépend des autres traitements que l'on désire faire !
Mais ce n'est qu'un simple grain de sel.
Bonne continuation.
Mais ce n'est qu'un simple grain de sel.
Bonne continuation.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
#include<stdio.h>
#include<stdlib.h>
#define TAILLE 3
typedef struct personne{
char nom[50]; /* nom de la personne */
char prenom[50]; /* prénom de la personne */
char numero[2020];/* numéro de la personne */
} PERS;
int main()
{
int i;
char *chaine;
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"},
};
for(i=0;i<TAILLE;i++) {
chaine =(char*) &Tpers[i].numero;
printf("%s\n", chaine);
}
return EXIT_SUCCESS;
}
#include<stdio.h>
#include<stdlib.h>
#define TAILLE 3
typedef struct personne{
char nom[50]; /* nom de la personne */
char prenom[50]; /* prénom de la personne */
char numero[2020];/* numéro de la personne */
} PERS;
int main()
{
int i;
char *chaine;
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"},
};
for(i=0;i<TAILLE;i++) {
chaine =(char*) &Tpers[i].numero;
printf("%s\n", chaine);
}
return EXIT_SUCCESS;
}
Ok merci lami20j,
Cela me permet d'afficher la liste des numéros de toutes les personnes.
Cependant, je n'arrive pas à mettre chaque caractère d'un numéro dans un tableau chaine[].
En réalité, j'aimerais savoir si un numéro à 2 chiffres en entrée est présent dans un numéro de personne à un position donnée.
Exemple : le numéro 77 est il présent dans le numéro personne 1720665005002 (celui de Pierre MARTIN) ?
Difficulté supplémentaire : il faut que le numéro recherché soit en 6ème et 7ème position. Pour Pierre par exemple, c'est le numéro 65. Et 65 est différent de 77. Donc le retour est négatif.
Extrait de code :
printf("\nTaper un numero a 2 chiffres : ");
scanf("%d",&number);
char *chaine;
for(i=0;i<nb_pers;i++) {
chaine = (char*) &Tpers[i].numero;
// que mettre ici ?
}
J'essaie d'être le plus clair possible. Merci de votre aide.
Cela me permet d'afficher la liste des numéros de toutes les personnes.
Cependant, je n'arrive pas à mettre chaque caractère d'un numéro dans un tableau chaine[].
En réalité, j'aimerais savoir si un numéro à 2 chiffres en entrée est présent dans un numéro de personne à un position donnée.
Exemple : le numéro 77 est il présent dans le numéro personne 1720665005002 (celui de Pierre MARTIN) ?
Difficulté supplémentaire : il faut que le numéro recherché soit en 6ème et 7ème position. Pour Pierre par exemple, c'est le numéro 65. Et 65 est différent de 77. Donc le retour est négatif.
Extrait de code :
printf("\nTaper un numero a 2 chiffres : ");
scanf("%d",&number);
char *chaine;
for(i=0;i<nb_pers;i++) {
chaine = (char*) &Tpers[i].numero;
// que mettre ici ?
}
J'essaie d'être le plus clair possible. Merci de votre aide.
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
24 déc. 2009 à 11:13
24 déc. 2009 à 11:13
Salut,
tu peux essayer la fonction strncmp...avec l'include qui va bien:#include<string.h>
for(i=0;i<nb_pers;i++) {
// que mettre ici ?
if (strncmp((char*)&Tpers[i].numero[6],"chaine_de_comparaison",2)==0)
printf("ok\n");
else
printf("ce nombre n'appartient pas à la chaine!!\n");
}
tu peux essayer la fonction strncmp...avec l'include qui va bien:#include<string.h>
for(i=0;i<nb_pers;i++) {
// que mettre ici ?
if (strncmp((char*)&Tpers[i].numero[6],"chaine_de_comparaison",2)==0)
printf("ok\n");
else
printf("ce nombre n'appartient pas à la chaine!!\n");
}
Salut,
Si tu ne veux pas utiliser strncmp tu peux essayer comme ça
#include<stdio.h>
#include<stdlib.h>
#define TAILLE 3
typedef struct personne{
char nom[50]; /* nom de la personne */
char prenom[50]; /* prénom de la personne */
char numero[2020];/* numéro de la personne */
} PERS;
int main()
{
int i,number,x,y;
char *chaine;
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"},
};
do{
printf("\nTaper un numero a 2 chiffres : ");
scanf("%d",&number);
while(getchar()!='\n');
}while(number<10 || number >99);
x=number/10;
y=number%10;
for(i=0;i<TAILLE;i++) {
chaine =(char*) &Tpers[i].numero;
if(chaine[5]==x+'0' && chaine[6]==y+'0')
printf("%s => %c et %c\n",chaine, chaine[5],chaine[6]);
else
printf("%s => %d ne corresponds pas\n",chaine,number);
}
return EXIT_SUCCESS;
}
Si tu ne veux pas utiliser strncmp tu peux essayer comme ça
#include<stdio.h>
#include<stdlib.h>
#define TAILLE 3
typedef struct personne{
char nom[50]; /* nom de la personne */
char prenom[50]; /* prénom de la personne */
char numero[2020];/* numéro de la personne */
} PERS;
int main()
{
int i,number,x,y;
char *chaine;
PERS Tpers[]={
{"MARTIN","Pierre","1720665005002"},
{"DUVAL","Jean","1700456126022"},
{"DURAND","Alain","1751265678031"},
};
do{
printf("\nTaper un numero a 2 chiffres : ");
scanf("%d",&number);
while(getchar()!='\n');
}while(number<10 || number >99);
x=number/10;
y=number%10;
for(i=0;i<TAILLE;i++) {
chaine =(char*) &Tpers[i].numero;
if(chaine[5]==x+'0' && chaine[6]==y+'0')
printf("%s => %c et %c\n",chaine, chaine[5],chaine[6]);
else
printf("%s => %d ne corresponds pas\n",chaine,number);
}
return EXIT_SUCCESS;
}
Ok problème résolu grâce à la technique de lami20j. Merci lami20j.
Je ne suis pas arrivé avec la technique de chuka (comparaison de chaines avec strncmp).
Surement que je ne suis pas encore assez bon.
En tout cas merci à tous pour votre aide qui m'a été précieuse et qui m'aura bien aidé à avancer.
Et merci pour votre rapidité de réponse.
A+
PS : il me reste à attaquer les listes chainées et l'allocation dynamique de mémoire... Snif !!
Je ne suis pas arrivé avec la technique de chuka (comparaison de chaines avec strncmp).
Surement que je ne suis pas encore assez bon.
En tout cas merci à tous pour votre aide qui m'a été précieuse et qui m'aura bien aidé à avancer.
Et merci pour votre rapidité de réponse.
A+
PS : il me reste à attaquer les listes chainées et l'allocation dynamique de mémoire... Snif !!
Salut,
il me reste à attaquer les listes chainées
Pour les listes chaînée tu peux jeter un coup d'oeil dans la FAQ liste simplement chaînée
il me reste à attaquer les listes chainées
Pour les listes chaînée tu peux jeter un coup d'oeil dans la FAQ liste simplement chaînée