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

Soyez le premier à donner votre avis sur cette source.

Vue 40 163 fois - Téléchargée 308 fois

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

Ajouter un commentaire

Commentaires

Sympa comme code...
et très utile quand on a touché à ces fonctions sous VB
scelw
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007
-
moi kan je ve afficher qqchose je mets juste :
cout << "texte_à_afficher"

à quoi servent les "<< endl" ????
banane_rose
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
-
endl = retour à la ligne
scelw
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007
-
après information, endl = un flush (la mémoire se vide) + retour à la ligne.
fobiga
Messages postés
1
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
8 juin 2007
-
Vous avez déjà testé ce code. Pour moi le RTrim ne marche pas.
RTrim( " ABC " ) donne " AB"
De plus, la première version affichée dans l'article n'est pas la même que celle du zip.
Heureusement, d'ailleurs car elle avait une deuxième erreur.
RTrim( " " ) laissait la chaîne inchangée.
Quand on livre du code, le minimum est de le tester.

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.