Les fonctions trim, rtrim et ltrim de vb en c++ ( chaine de caractère )

Description

Il n'y à pas grand chose à dire... c'est seulement pour enlever les espaces à la droite(RTrim), à la gauche(LTrim) ou à gauche et à droite(Trim) dans une chaine... à première vue ca l'aire compliqué, il parraît y avoir beaucoup de code et tout... mais enlevé les commentaires et la fonction main() et il n'y auras presque plus rien :P

Source / Exemple :


// Fichiers à inclure
#include <string.h>
#include <stdio.h>

// Prorotypes
void Trim(char *String);   // Enlever les espaces à gauche et à droite dans une chaine
void RTrim(char *String);  // Enlever les espaces à droite dans une chaine
void LTrim(char *String);  // Enlever les espaces à gauche dans une chaine

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Entré du programme
int main()
{

// Chaine(variable) avec laquel on va faire les teste
char *MaChaine = NULL;  // L'initialise à NULL

      // Efface l'écran
      system("cls");

      // Alloue de l'espace
      MaChaine = new char[100];
      // Copie une chaine de caractères dans l'espace alloué
      strcpy(MaChaine, "   Salut ca va bien? Moi oui!   ");

      cout << "Pour verifier s'il n'y a pas d'espaces je vais utilise -> pour le debut de la ligne";
      cout << " et <- pour la fin de la ligne." << endl << endl;

      cout << "Voici le chaine avant modification: " << endl;
      // Affiche la chaine avant modifications
      cout << "->" << MaChaine << "<-" << endl << endl;

      cout << "Resultat avec la fonction RTrim(enlever les espaces a la droite)" << endl;

      // Modifie la chaine(enlève les espaces à droite)
      RTrim(MaChaine);
      // Affiche la chaine
      cout << "->" << MaChaine << "<-" << endl << endl;

      cout << "Resultat avec la fonction LTrim(elever les espaces a gauche)" << endl;

      // Modifie la chaine(enlève les espaces à gauche)
      LTrim(MaChaine);
      // Affiche la chaine
      cout << "->" << MaChaine << "<-" << endl << endl;

      cout << "J'ai rajouter des espaces a gauche et a droite et voila le resultat de la fonction Trim:" << endl;

      // Réalloue de l'espace
      MaChaine = new char[100];
      // Copie une chaine de caractères dans l'espace alloué
      strcpy(MaChaine, "   Salut ca va bien? Moi oui!   ");

      // Enlève les espaces à gauche et à droite dans la chaine
      Trim(MaChaine);
      // Affiche la chaine
      cout << "->" << MaChaine << "<-" << endl;

      // Fait une pause
      system("pause");

      // Libère la mémoire alloué
      delete [] MaChaine;
      // Et c'est terminer!
      return 0;

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Enlever les espaces à droite et à gauche dans une chaine
void Trim(char *String)
{

      // Enlève les espaces à gauche
      LTrim(String);
      // Enlève les espces à droite
      RTrim(String);

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Enlever les espaces à gauche dans une chaine
void LTrim(char *String)
{

// Pour effectuer les boucles
unsigned int i = 0;
unsigned int j = 0;
// Connaître la longeur de la chaine
unsigned int stringlen = (strlen(String) - 1);

      // S'il y à des caractères(Si la chaine n'est pas vide)
      if (stringlen > 0)
      {

            // Recherche la position du premier caractère qui n'est pas un espace dans la chaine
            // Passe tous les caractères un à un à partir du début
            while (String[i] == ' ')
                  i++;

            // S'il y à bien des espaces à la gauche(début de la chaine)
            if (i > 0)
            {
                  // Décrémente la position de tous les caractères dans la chaine vers la gauche
                  // Ex:
                  // Si la chaine est par exemple:  [  Ma chaine  ]
                  // Après avoir passer par cette boucle elle va devenir
                  // [Ma chaine  ]

                  for (j = 0; j <= (stringlen - i); j++)
                        String[j] = String[(i + j)];

                  String[j] = 0;  // Ajoute le caractères(NULL) de fin de chaine
            }

      }

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Enlever les espaces à la droite dans une chaine
void RTrim(char *String)
{

// Pour effectuer la boucle
unsigned int i = 0;
// Connaître la longeur de la chaine
unsigned int stringlen = (strlen(String) - 1);

      // S'il y à des caractères(Si la chaine n'est pas vide)
      if (stringlen > 0)
      {

            // Recherche le premier caractère qui n'est pas un espace à partir de la fin
            i = stringlen;
            while (String[i] == ' ')
                  i--;

            // S'il y avait des espaces à la fin de la chaine
            if (i < stringlen)
                  String[i] = 0;  // On les enlève

            // Ex:
            // Ca c'est la chaine:  [  Ma chaine    ]
            // Après avoir ajouter le 0(NULL) dans la chaine: [  Ma chaine0   ]
            // Donc tous les espaces après le 0(caractère NULL) seront supprimer!
            // Le résultat final seras: [  Ma chaine]

      }

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

Conclusion :


Créé et tester sous Dev-C++ 4. Dans le fichier zip il y à le même code et l'exécutable(console).

En cas de problème(s) avec ce code ou autre(s), laissez moi un message! :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.