M1102 – TP6 – Exercice 5

Dans cet exercice on souhaite permuter les deux chaines du vecteur VString, qui sont aux positions PosBeg et PosEnd.
Ecrire la fonction Swap () correspondante.
La signature de la fonction est :

vector <string> & Swap (vector <string> & VString, const unsigned & PosBeg, const unsigned & PosEnd);

Modifier le main () pour prendre en compte cette fonction. L’appel de ces fonctions se fait en saisissant la chaine « swa» suivie de deux numéros de ligne.

M1102 – TP6 – Exercice 6

Dans cet exercice, on souhaite supprimer une ligne (une case du vecteur) à l’aide de la fonction Delete () de signature :

vector <string> & Delete (vector <string> & VString, const unsigned & PosBeg);

Pour se faire, on doit tasser (décaler vers la gauche) l’ensemble des cases du vecteur qui suivent PosBeg.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « del» suivie d’un numéro de ligne.

M1102 – TP6 – Exercice 7

Dans cet exercice, on souhaite insérer une chaine de caractères à une position donnée dans le vecteur à l’aide de la fonction Insert () de signature :

vector <string> & Insert (vector <string> & VString, const unsigned & PosBeg, const string & Line);

Pour se faire, on doit agrandir le vecteur d’une case, et de décaler vers la droite le contenu de toutes les cases ayant un indice supérieur ou égal à PosBeg.

Modifier le main () pour prendre en compte cette fonction. L’appel de ces fonctions se fait en saisissant la chaine « ins » suivie d’un numéro de ligne et de la chaine à insérer.

NB: pour saisir une chaine de caractère contenant des espaces, utiliser l’instruction getline (cin, XXX); à la place de cin >> XXX; (XXX étant votre variable de type string).

M1102 – TP6 – Exercice 8

Dans cet exercice, on souhaite déplacer une chaine de caractères d’une position initiale vers une position finale Move () de signature :

 

vector <string>& Move (vector <string> & VString, const unsigned & PosBeg, const unsigned & PosEnd);

Modifier le main () pour prendre en compte cette fonction. L’appel de cette fonction se fait en saisissant la chaine « mov» suivie de deux numéros de ligne.

M1102 – TP6 – Exercice 9

Dans cet exercice, on souhaite cadrer à gauche une chaine de caractères, cad supprimer tous les caractères d’espacement en début de cette chaine. Pour cela écrire le corps de la fonction TrimLeft () de signature :

string & TrimLeft (string & Str);

Ecrire le corps des deux fonctions suivantes :

vector <string> & TrimLeft (vector <string> & VString) ;
vector <string> & TrimLeft (vector <string> & VString, const unsigned & LineNumber) ;

La première cadre à gauche toutes les lignes du vecteur, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « tl» suivie de « tout » ou d’un numéro de ligne.

M1102 – TP6 – Exercice 10

Dans cet exercice, on souhaite cadrer à droite une chaine de caractères sur XXX caractères (XXX étant un entier naturel), et ce sans utiliser le manipulateur setw (). Il faut donc insérer autant d’espaces que nécessaire en début de chaine de caractères. Pour cela écrire le corps de la fonction TrimRight () de signature :

string & TrimRight (string & Str , const unsigned long & Width);

L’algorithme de haut niveau est le suivant :

  1. Redimensionner Str à Width;
  2. Décaler en partant de la fin les caractères de Str à leur nouvelle place ;
  3. Remplacer tous les caractères nécessaires par des espaces.

Ecrire le corps des deux fonctions suivantes :

vector <string> & TrimRight (vector <string> & VString, const unsigned long & Width) ;
vector <string> & TrimRight (vector <string> & VString, const unsigned & LineNumber, const unsigned long & Width) ;

La première cadre à droite toutes les lignes du vecteur, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « tr» suivie de « tout » ou d’un numéro de ligne.

NB: L’entier Width ne doit pas être demandé par saisie, mais est votre deuxième argument de commande à partir de maintenant. Mettez une valeur supérieure ou égale à 65.

M1102 – TP6 – Exercice 11

Dans cet exercice, on souhaite centrer une chaine de caractères sur XXX caractères (XXX étant un entier naturel). Pour cela écrire le corps de la fonction Center () de signature :

string & Center (string & Str, const unsigned long & Width);

Inspirez-vous de ce que vous avez fait pour la fonction TrimRight () (cf. exercice 10).

Ecrire le corps des deux fonctions suivantes :

vector <string> & Center (vector <string> & VString, const unsigned long & Width) ;
vector <string> & Center (vector <string> & VString, const unsigned & LineNumber, const unsigned long & Width) ;

La première centre toutes les lignes du vecteur, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « cen» suivie de « tout » ou d’un numéro de ligne.

M1102 – TP6 – Exercice 12

Dans cet exercice, on souhaite supprimer tous les espaces en début et en fin de chaine de caractères. Pour cela écrire la fonction Trim () de signature :

string & Trim (string & Str);

Ecrire le corps des deux fonctions suivantes :

vector <string> & Trim (vector <string> & VString) ;
vector <string> & Trim (vector <string> & VString, const unsigned & LineNumber) ;

La première supprime les espaces en début et en fin de toutes les lignes du vecteur, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « tri» suivie de « tout » ou d’un numéro de ligne.

M1102 – TP6 – Exercice 13

Dans cet exercice, on souhaite justifier une chaine de caractères sur XXX caractères (XXX étant un entier naturel). Pour cela, écrire le corps de la fonction Justify () de signature :

string & Justify (string & Str, const unsigned long & Width);

L’algorithme de haut niveau est le suivant :

  1. Remplacer tous les caractères d’espacement par un espace, et compter combien d’espaces on a à la fin de cet opération.
  2. Substituer (remplacer) chaque caractère d’espacement par le nombre d’espaces nécessaires.

Vue la complexité de l’étape (2), vous pouvez utiliser les fonctions find () et insert () sur les string.

Ecrire le corps des deux fonctions suivantes :

vector <string> & Justify (vector <string> & VString, const unsigned long & Width);
vector <string> & Justify (vector <string> & VString, const unsigned & LineNumber, const unsigned long & Width);

La première justifie toutes les lignes du vecteur, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « jus» suivie de « tout » ou d’un numéro de ligne.

M1102 – TP6 – Exercice 14

On souhaite annuler une justification sur une chaine de caractères, cad remplacer plusieurs espaces consécutifs par un unique. Pour cela, écrire le corps de la fonction RemoveMultipleSpaces () de signature :

string & RemoveMultipleSpaces (string & Str);

Cette fonction doit appeler la fonction erase () des string pour faire la suppression.

Ecrire le corps des deux fonctions suivantes :

vector <string> & RemoveMultipleSpaces (vector <string> & VString) ;
vector <string> & RemoveMultipleSpaces (vector <string> & VString, const unsigned & LineNumber) ;

La première annule la justification de toutes les lignes du vecteur, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions. L’appel de ces fonctions se fait en saisissant la chaine « mul» suivie de « tout » ou d’un numéro de ligne.