Inverser une chaîne de caractère en C

Dans ce tutoriel nous allons découvrir comment inverse une chaîne de caractère entrée par l’utilisateur de façon simple et récursive. Par exemple, si un utilisateur entre la chaîne « WayToLearnX », il sera « XnraeLoTyaW » lors de l’inversion. Une chaîne qui reste la même lors de l’inversion est une chaîne nommée palindrome.
Palindrome en CPalindrome en CUn nombre est un palindrome si il s’écrit de la même manière après l’inversion de ce dernier.   Exemples: 232, 191, 22022, 111, 666, 12012…Lire plus  

Programme C pour inverser une chaîne
#include <stdio.h>
 
int main()
{
    char str[100], rev[100];
    int t, i, j;
 
    printf(" Entrez une chaîne de caractère :  ");
    gets(str);
    
    j = 0;
    t = strlen(str);
 
    rev[t] = '\0'; //le dernier caractère doit toujours être égale à '\0'.
    for (i = t - 1; i >= 0; i--)
    {
      rev[j++] = str[i];
    }
    rev[i] = '\0';
 
    printf(" Chaîne de caractère après inversion = %s", rev);
    
    return 0;
}

La sortie :
 

 
 

Programme C pour inverser une chaîne de façon récursive

Ce programme C est le même que ci-dessus. Pourtant, nous utilisons cette fois le concept de fonctions récursives pour séparer la logique du programme principal.

#include <stdio.h>
 
void inverser(char *p, int start, int end)
{
   char ch;
   if (start >= end)
      return;
 
   ch = *(p+start);
   *(p+start) = *(p+end);
   *(p+end) = ch;
   inverser(p, ++start, --end);
}
 
int main()
{
   char str[100];
   printf(" Entrez une chaîne de caractère :  ");
   gets(str);
   inverser(str, 0, strlen(str)-1);
   printf(" Chaîne de caractère après inversion = %s", str);
   return 0;
}

La sortie :
 

 
Dans la méthode récursive inverser(), nous échangeons des caractères au début et à la fin de la chaîne, puis nous nous déplaçons vers le milieu de la chaîne. Cette méthode est inefficace parce que nous faisons plusieurs appels récursives, ça dépend de la longueur de la chaîne.
 
 

2 réflexions sur “Inverser une chaîne de caractère en C

  • avril 9, 2020 à 10:55
    Permalien

    Bonjour,
    Il y a une une erreur sur votre code. En effet, avant d’inverser la chaîne de caractère (avant le for), il faut d’abord mettre le caractère de fin ‘\0’. Si vous ne le mettez pas, la chaîne renversée ajoutera un caractère erroné à la fin. Voici l’exemple corrigé.

    j = 0;
    t = strlen(str);
    rev[t ] = ‘\0’ //le dernier caractère doit toujours être égale à ‘\0’.
    for (i = t – 1; i >= 0; i–)
    {
    rev[j++] = str[i];
    }
    ….
    Cordialement!

    Répondre
    • avril 10, 2020 à 12:21
      Permalien

      Merci pour cette remarque, c’est corrigé 🙂

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *