Anagramme en C

Pour vérifier si les deux chaînes sont des anagrammes ou non en programmation C, vous devez demander à l’utilisateur de saisir les deux chaînes et commencer à chercher l’anagramme.
 
 
Deux chaînes forment un anagramme, si et seulement si elles contiennent le même nombre de caractères, l’ordre des caractères peu importe. c’est-à-dire, si deux chaînes sont des anagrammes, une chaîne peut être réorganisée pour former l’autre chaîne. Par exemple:

  • abc et cba sont des anagrammes.
  • créatif et réactif sont également des anagrammes

 

Programme pour vérifier si les deux chaînes sont des anagrammes
#include <stdio.h>
 
int isAnagram(char str1[], char str2[])
{
  int tab1[26] = {0}, tab2[26] = {0}, i=0;
 
  while (str1[i] != '\0')
  {
    tab1[str1[i]-'a']++;
    i++;
  }
 
  i = 0;
 
  while (str2[i] != '\0')
  {
    tab2[str2[i]-'a']++;
    i++;
  }
 
  for (i = 0; i < 26; i++)
  {
    if (tab1[i] != tab2[i])
      return 0;
  }
 
  return 1;
}
 
int main()
{
  char str1[100], str2[100];
 
  printf("Entrez la première chaîne\n");
  gets(str1);
 
  printf("Entrez la deuxième chaîne\n");
  gets(str2);
 
  if (isAnagram(str1, str2) == 1)
    printf("Les chaînes sont des anagrammes.\n");
  else
    printf("Les chaînes ne sont pas des anagrammes.\n");
 
  return 0;
}

La sortie :
 

 
 

2 réflexions sur “Anagramme en C

  • décembre 21, 2020 à 9:10
    Permalien

    J’ai vue une lettrre ‘a’ qui traine dans les deux boucles while, et je voudrais avoir des explications sur ca. En gros, j’ai pas bien compris ce programme mais une chose est sure, il est parfait.

    Répondre
    • décembre 22, 2020 à 1:42
      Permalien

      Ok, je vais faire de mon mieux pour vous expliquer 🙂

      str1 est un tableau de caractères, chaque caractère est une valeur ASCII (c’est-à-dire numérique, int), vous pouvez donc l’utiliser dans des expressions mathématiques. i est un entier et est utilisé pour parcourir le tableau de caractères str1. En supposant que tous les caractères de str1 seront des lettres minuscules, alors l’expression

      tab1[str1[i] - 'a']++

      Évaluera à 0 pour ‘a’, 1 pour ‘b’ et ainsi de suite. parce que tab1 est un tableau d’entiers de taille 26 (int tab1[26]), chaque lettre minuscule aura un index correspondant valide (‘a’ – ‘a’ = 0, ‘z’ – ‘a’ = 25 ), vous comptez donc essentiellement les occurrences pour chaque caractère. tab2 [str2 [i] - 'a']++ fait exactement la même chose pour la deuxième chaîne str2: compter les occurrences de chaque lettre dans la chaîne.

      À la fin, vous parcourez ces tableaux tab1 et tab2 qui comptent le nombre de lettres, en comparant les valeurs de chaque lettre (nombre d’occ.). Si toutes les lettres apparaissent le même nombre de fois dans les deux chaînes, vous avez affaire à un anagramme. Sinon, vous renvoyez 0.

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.