Nous sommes actuellement le 29 Juin 2026, 10:07

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 13 message(s) ] 
Auteur Message
 Sujet du message: Problème C++
MessagePublié: 26 Juin 2002, 23:39 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

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! :D

_________________
Vince


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 27 Juin 2002, 11:35 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 27 Juin 2002, 13:02 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 28 Juin 2002, 00:32 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 28 Juin 2002, 08:14 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 28 Juin 2002, 08:47 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 28 Juin 2002, 12:36 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 28 Juin 2002, 13:14 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 28 Juin 2002, 22:47 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 29 Juin 2002, 07:29 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 29 Juin 2002, 07:35 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 29 Juin 2002, 23:37 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

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
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 30 Juin 2002, 13:19 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

Inscription : 06 Jan 2002, 22:12
Message(s) : 251
Localisation : Québec
Je vous remercie! :D
Je crois bien avoir régler mon problème!!

_________________
Vince


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 13 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


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

Recherche de:
Aller vers :  
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site