Je suis en train de faire un programme qui recherche des anagrammes (j'entends par anagramme un mot qui peut s'écrire avec les lettres d'un autre). Après de nombreux essais je pensais avoir définitivement trouvé comment écrire ma fonction principale isAnagram, mais je viens de terminer le reste du code et je m'aperçois qu'en fait elle me donne des faux positifs (et peut-être des faux négatifs mais c'est moins évident à déterminer)
Si quelqu'un pouvait regarder mon code et me dire comment le corriger... Merci !
// stringD.h
class stringD
{
private:
s1,s2:std::string;
// s1 et s2 ne contiennent que des lettres majuscules entre 'A' et 'Z'
// s2 contient les mêmes lettres que s1 mais triées dans l'ordre alphabétique
public:
size_t size(void);
bool isAnagram(stringD s);
};
// stringD.cpp
bool stringD::isAnagram(stringD s) // this* est-il écrit avec les lettres de s ?
{
if (size()>s.size()) return false;
for (unsigned i=0,j=0; j<s.size(); i++, j++)
{
while (s.s2[j]<s2[i])
j++;
if (s2[i]!=s.s2[j])
return false;
}
return true;
}Un exemple de faux positif :x.s1="LETTRES", x.s2="EELRSTT" y.s1="LUTTEUR", y.s2="ELRTTUU" bool b=x.isAnagram(y); // b==true !?


