Fonction avec 2 test

Flowneo Messages postés 88 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 30 août 2012 - 10 nov. 2009 à 21:59
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 11 nov. 2009 à 00:30
Bonjour,

Je voudrais faire une fonction qui contient 2 conditions (2 test à faire), je vous explique:

Une fonction test qui va vérifier que la saisie utilisateur est correct, celle-ci vérifie dans 1 premier temps si les caractères voulue sont bien saisie ( par exemple aeiouy):

for (i=0; i<longueurMot; i++){ //boucle pour extraire chaque caractère 1 à 1
string extrait= mot.substr(i,1);
if (extrait != "a" & extrait != "e" & extrait != "i"& extrait != "o" & extrait != "u"& extrait != "y"){ //compare chaque caractère pour vérifier la saisie
cout<<"erreur de saisie"<<endl;
return true; //si erreur
}
}return false;

j'ai donc réussi a faire cela , mais maintenant je voudrais inclure dans ma fonction test un deuxieme test qui va vérifier que l'utilisateur ne rentre pas 2 fois la même lettre...et a la fin je voudrais avoir return(bool); de l'ensemble de la fontion.

jespere que vous comprendrez ce que je veux dire...
merci à ceux qui vont m'aider !

1 réponse

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 nov. 2009 à 00:30
Ouch horrible !
Ta fonction n'est particulièrement pas optimisé. Tu recopies une sous-chaines de taille 1 à chaque itération. Il te suffit juste de regarde le caractère courant.
De plus le symbole "ET" est "&&" et non "&" (qui a un sens légèrement différent).

Voilà une amélioration de ton code.
#include 

bool stringContains(const std::string& s, char c)
{
  const int size = s.length();

  for (int i = 0; i < size; ++i)
    if (c == s[i])
      return true;

  return false;
}

bool letterIsUnique(const std::string& s)
{
  const int size = s.length();

  for (int i = 0; i < size - 1; ++i)
    for (int j = i + 1; j < size; ++j)
      if (s[j] == s[i])
return false;

  return true;
}

bool test(const std::string& chaine, const std::string& whiteList)
{
  const int size = chaine.length();

  // Vérifier que le caractère en cours n'est pas interdit
  for (int i = 0; i < size; ++i)
    if (!stringContains(whiteList, chaine[i]))
      return false;

  // Maintenant on vérifie qu'aucune lettre n'est en double
  return letterIsUnique(chaine);
}

int main()
{
  std::cout << test("Tete", "aeiouy") << std::endl;
  std::cout << test("eayi", "aeiouy") << std::endl;
  std::cout << test("eau", "aeiouy") << std::endl;
  std::cout << test("eaau", "aeiouy") << std::endl;
  std::cout << test("", "aeiouy") << std::endl;

  return 0;
}
0
Rejoignez-nous