| |
Consulter les messages sans réponse | Consulter les sujets actifs
|
Page 1 sur 1
|
[ 13 message(s) ] |
|
| Auteur |
Message |
|
Vince
|
Publié: 26 Juin 2002, 23:39 |
|
Inscription : 06 Jan 2002, 22:12 Message(s) : 251 Localisation : Québec
|
Question de programmation
C'est quoi la ligne de code pour pouvoir comparer une chaine de caractère à une variable(qui est aussi une chaîne de caractère) contenant des espaces!!
ex: salut toi
??
Merci d'avance! 
_________________ Vince
|
|
| Haut |
|
 |
|
René Rhéaume
|
Publié: 27 Juin 2002, 11:35 |
|
Inscription : 07 Jan 2002, 22:14 Message(s) : 790 Localisation : Extrémité sud-ouest de Lévis
|
|
Est-ce pour comparer tout ou pour rechercher une sous-chaîne dans une chaîne ?
|
|
| Haut |
|
 |
|
Kaltar
|
Publié: 27 Juin 2002, 13:02 |
|
Inscription : 30 Avr 2002, 09:02 Message(s) : 152
|
|
c'est strcmp() ( avec ses variantes... stricmp(), strncmp() ).
ex:
char *szVar1 = "Salut toi"; // pour simplifier les choses...
if ( strcmp( szVar1, "Salut toi" ) == 0 )
{
// Les deux chaines concordent...
}
il y a stricmp() entre autres pour que ca ne soit pas 'case sensitive'...
--
Kaltar
|
|
| Haut |
|
 |
|
Vince
|
Publié: 28 Juin 2002, 00:32 |
|
Inscription : 06 Jan 2002, 22:12 Message(s) : 251 Localisation : Québec
|
Je mets pas en doute tes compétences Katar!  .. mais ca na pas régler mon problème!
Peut être que je me suis mal exprimer..
Mon problème:`
J'ai une variable char qui s'appelle.. par exemple: typed
Je veux comparer la variable typed avec une autre chaine de caractères
if(stricmp("salut toi",typed)==0){
system("CLS");
command_help();
validcommand = 1;
}
Le problème est que cela ne marche pas car il y a un espace dans le "salut toi"
_________________ Vince
|
|
| Haut |
|
 |
|
René Rhéaume
|
Publié: 28 Juin 2002, 08:14 |
|
Inscription : 07 Jan 2002, 22:14 Message(s) : 790 Localisation : Extrémité sud-ouest de Lévis
|
|
Donnez nous des valeurs exemple, donnant un résultat valide ou non (poiur les tests), de la variable typed. Cela, m'aiderait à résoudre votre problème.
|
|
| Haut |
|
 |
|
Procyon
|
Publié: 28 Juin 2002, 08:47 |
|
Inscription : 07 Jan 2002, 15:10 Message(s) : 3551 Localisation : Beauport, Québec
|
Vince a écrit: Peut être que je me suis mal exprimer..
Le problème est que cela ne marche pas car il y a un espace dans le "salut toi"
1 - Vous vous êtes probablement mal exprimé effectivement.
2 - Pour un ordinateur, un espace est un caractère au même niveau que n'importe quelle lettre de l'alphabet. Le fait qu'il existe ou pas ne change rien à la comparaison, à moins bien sûr qu'il n'est pas présent dans la chaîne comparée, mais là c'est un autre problème (ou du moins, le problème à un niveau différent).
3 - Il nous faut donc des explications plus claires qu'une déduction que tu peux tirer. Quand on demande une piste de solution, il faut énoncé un problème, pas une déduction.
_________________ Procyon,
Modérateur de la section Trouvailles
|
|
| Haut |
|
 |
|
Vince
|
Publié: 28 Juin 2002, 12:36 |
|
Inscription : 06 Jan 2002, 22:12 Message(s) : 251 Localisation : Québec
|
|
Regarder.. je crois que la je peux pas être plus clair....
count <<"Entre une chaine de charactère quelquonque...\n"
cin >> Typed
if(strcmp("salut toi",typed)==0){
system("CLS");
command_help();
validcommand = 1;
}
Mon problème est que cela ne marche pas car il y a un espace dans "Salut toi".. je dis ca parce que si la chaine de caractère aurait été par exemple: Salut.. et bien cela aurait marcher...
_________________ Vince
|
|
| Haut |
|
 |
|
Procyon
|
Publié: 28 Juin 2002, 13:14 |
|
Inscription : 07 Jan 2002, 15:10 Message(s) : 3551 Localisation : Beauport, Québec
|
Vince a écrit: Regarder.. je crois que la je peux pas être plus clair....
count <<"Entre une chaine de charactère quelquonque...\n" cin >> Typed
if(strcmp("salut toi",typed)==0){ system("CLS"); command_help(); validcommand = 1; }
Mon problème est que cela ne marche pas car il y a un espace dans "Salut toi".. je dis ca parce que si la chaine de caractère aurait été par exemple: Salut.. et bien cela aurait marcher...
Première des choses, j'sais pas si ton code a été copié de ton programme, mais Typed n'est pas la même variable que typed dans ton exemple. Le C++ est case sensitive.
Ensuite, strcmp va comparer des textes sensibles à la case. Alors si tu compare "Salut toi" et "salut toi", ça va retourner une valeur autre que 0 parce que ce sont deux chaînes différentes. Utilise stricmp pour comparer des chaînes ensembles.
Comme t'es en C++, je te conseille d'utiliser un objet String au lieu d'une variable char*, ça va être beaucoup plus simple car tu vas pouvoir comparer directement des chaînes entre elles sans fonctions (l'opérateur == est surchargé (c'est tu ça le terme???))
Va lire ça, les exemples pourraient t'intéresser:
http://www.cse.fau.edu/~cot3002l/string ... _bool.html
http://www.cse.fau.edu/~cot3002l/string ... _find.html
_________________ Procyon,
Modérateur de la section Trouvailles
|
|
| Haut |
|
 |
|
Kaltar
|
Publié: 28 Juin 2002, 22:47 |
|
Inscription : 30 Avr 2002, 09:02 Message(s) : 152
|
|
Je crois comprendre que le probleme est le "cin". La je ne suis pas ferré dans ces redirections... Je crois que tu devrais utiliser autre chose qu'un "cin" pour capter une chaine de caracteres. Car le "cin" arrete sa chaine de caractere quand il encontre un espace.
Dans la plupart de mes programmes, j'utilise mes fonctions qui emmagasinent les touches tapees dans une variable.
i.e: un while, un getch(), un pointeur et un buffer d'une bonne longueur.
Mais ca fait longtemps que j'ai fait ca. Alors si c'est pas ca, je donne ma langue au chat.
--
Kaltar
|
|
| Haut |
|
 |
|
Procyon
|
Publié: 29 Juin 2002, 07:29 |
|
Inscription : 07 Jan 2002, 15:10 Message(s) : 3551 Localisation : Beauport, Québec
|
Kaltar a écrit: Je crois comprendre que le probleme est le "cin". La je ne suis pas ferré dans ces redirections... Je crois que tu devrais utiliser autre chose qu'un "cin" pour capter une chaine de caracteres. Car le "cin" arrete sa chaine de caractere quand il encontre un espace.
Dans la plupart de mes programmes, j'utilise mes fonctions qui emmagasinent les touches tapees dans une variable. i.e: un while, un getch(), un pointeur et un buffer d'une bonne longueur.
Mais ca fait longtemps que j'ai fait ca. Alors si c'est pas ca, je donne ma langue au chat. -- Kaltar
Je viens de faire un test et effectivement, le cin arrête la saisie au premier espace. J'avoue que je ne suis pas familier avec le cin, j'utilise d'autres fonctions pour la saisie.
La fonction gets() prends une chaîne de caractère jusqu'au retour de chariot.
_________________ Procyon,
Modérateur de la section Trouvailles
|
|
| Haut |
|
 |
|
René Rhéaume
|
Publié: 29 Juin 2002, 07:35 |
|
Inscription : 07 Jan 2002, 22:14 Message(s) : 790 Localisation : Extrémité sud-ouest de Lévis
|
Étant donné que la fonction gets (pour «get string», obtenir une chaîne de caractères pouvant comporter des espaces jusqu'a ce qu'on appuie sur Enter) peut causer des problèmes de corruption de mémoire, j'ai fait une petite fonction pour ça :
Code : char * n_getsn(char * buffer, long nMax) { long n = 0; char * retPtr = NULL;
retPtr = fgets(buffer, nMax + 1, stdin); while (buffer[n] != '\0') { n++; }
/*Remplacer le \n (0x0A) en trop de fgets par un carcatere nul*/ if (buffer[n - 1] == '\n') { buffer[n - 1] = '\0'; } return (retPtr); }
|
|
| Haut |
|
 |
|
TaLF
|
Publié: 29 Juin 2002, 23:37 |
|
Inscription : 06 Jan 2002, 22:37 Message(s) : 296
|
La méthode la plus utilisé pour saisir une chaine de caractere (avec espace) est ceci:
Code : cin.get(typed, iNbCharMax); cin.ignore(80, '\n');
|
|
| Haut |
|
 |
|
Vince
|
Publié: 30 Juin 2002, 13:19 |
|
Inscription : 06 Jan 2002, 22:12 Message(s) : 251 Localisation : Québec
|
Je vous remercie!
Je crois bien avoir régler mon problème!!
_________________ Vince
|
|
| Haut |
|
 |
|
Page 1 sur 1
|
[ 13 message(s) ] |
|
Qui est en ligne ? |
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité |
|
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum
|
|
|
|