Anagramme

jbrem Messages postés 3 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 19 octobre 2008 - 18 oct. 2008 à 10:52
Elouafiq Messages postés 1 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 14 décembre 2008 - 14 déc. 2008 à 15:05
Bonjour,
je suis étudiant et je dois comparer si les 2 mots que j'ai saisi sont des anagrammes. J'ai réussi à voir si la longueur de mots était identique. Je pensais créer un compteur de chaque lettre et si ces compteurs sont égaux, les mots seraient donc des anagrammes.
PS: je suis au tout début de la prog en C++ donc pour l'instant c'est un peu du charabia!
Merci à tout ceux qui me répondront

6 réponses

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
18 oct. 2008 à 11:44
Bonjour,

La méthode que tu proposes est correcte. Une autre méthode - moins efficace mais plus facile à mettre en oeuvre, consiste à trier les caractères des deux chaînes, puis à comparer les chaînes triées : si elles sont égales, les chaînes d'origine sont des anagrammes.
0
jbrem Messages postés 3 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 19 octobre 2008
18 oct. 2008 à 11:50
d'accord & merci pour le tuyau!
Mais comment on exprime tout ça en C++ ? car je ne vois pas comment "trier les caractères" je suis un tout neuf dans le domaine!
Merci!
0
cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
18 oct. 2008 à 12:54
Ca dépend ! Quel est le contexte de ton programme ?

Par exemple, si tu as le droit d'utiliser la librairie standard du c++, ton programme se réduit à qq lignes de codes :

bool sont_anagrammes( const char * c_s1 , const char * c_s2 )
{
    std::string str1( c_s1 );
    std::string str2( c_s2 );
    std::sort( str1.begin() , str1.end() );
    std::sort( str2.begin() , str2.end() );
    return str1 == str2;
}

En revanche, l'objectif de ton programme est de te faire travailler l'algorithmie et la programmation, il faut que tu fasses abstraction du langage dans un premier temps, et que tu décrives en langage naturel la ou les procédures que tu vas utiliser pour résoudre ton pb.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 oct. 2008 à 09:35
int IsAnagramme(char *A, char *B)
{
  BYTE bta[256], btb[256], *c;
  DWORD *pdwa, *pdwb;
  int i;
 
  pdwa = (DWORD*) bta;
  pdwb = (DWORD*) btb;
  i = 63;
  do {
    pdwa[i] = 0;
    pdwb[i] = 0;
  } while(--i >= 0);
 
  c = (BYTE*) A;
  while(*c) {
    bta[*c]++;
    c++;
  }
  c = (BYTE*) B;
  while(*c) {
    btb[*c]++;
    c++;
  }
 
  i = 63;
  do {
    if(pdwa[i] != pdwb[i]) return 0;
  } while(--i >= 0);
 
  return 1;
}

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jbrem Messages postés 3 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 19 octobre 2008
19 oct. 2008 à 19:26
merci à tous!
0
Elouafiq Messages postés 1 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 14 décembre 2008
14 déc. 2008 à 15:05
Voici la reponse rapide pour ton probleme:
1-premierement tu doit trier les deux chaines de characteres:
tu entre les deux mots chacun dans cette fonction ex:


Bubble(mot1,strlen(mot1));
Bubble(mot2,strlen(mot2));
// et puis tu vas les comparer
if(!(strcmp(mot1,mot2))
printf("\n il sont des anagrames");
else
printf("\n il ne sont po des anagrammes");

// tu vas dire pourkoi les trier:
par example si ta le mot" alakasame" et le mot "ksamalae"
quand tu vas les trier il vont devenir: aaaeklms

alors ils vont avoir le meme mot trier.
si il ne sont po quand il seront trier il ne seront po pareille.

tu auras besoin de la librairie: <string.h>
et des fonctions suivantes:
void Bubble(char*str,int size)
{
int i,j;
for(i=0;i<size-1;i++) for(j="size-1;j">i;j--)
if(str[j]</size-1;i++)></string.h>
0
Rejoignez-nous