R1.01 – TP5 – Exercice 3

A partir de cet exercice :

  1. Il va falloir « Charger » le fichier qui est argument de commande dans un vecteur ;
  2. Puis il faudra d’appliquer des fonctions que vous allez devoir écrire à une partie ou à l’intégralité du vecteur en fonction de ce que rentre l’utilisateur.

Par exemple, si l’utilisateur rentre au clavier les chaines « min tout » c’est qu’il souhaite qu’on transforme l’intégralité du vecteur en minuscule. En revanche, s’il rentre « min 14 » c’est qu’il souhaite transformer uniquement la 14ème ligne du vecteur en minuscule.

Plusieurs solutions s’offrent à vous : soit vous ne lisez que des string et si besoin vous pouvez les convertir en entier long à l’aide de la fonction stoul () (String TO Unsigned Long), soit vous faite un extraction à l’aide d’une variable correctement typée. Dans tous les cas, la saisie clavier est supposée juste.

Ecrire le corps des deux fonctions suivantes :

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

La première transforme toutes les lignes du vecteur en leur minuscule correspondante, la seconde ne s’applique à la ligne LineNumber.

Modifier le main () pour prendre en compte ses deux fonctions.

R1.01 – TP5 – Exercice 4

Dans cet exercice, on souhaite transformer une string en sa majuscule.

Ecrire la fonction ToUpper () de signature :

string & ToUpper (string & Str);

Ecrire le corps des deux fonctions suivantes :

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

La première transforme toutes les lignes du vecteur en leur majuscule correspondante, 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 « maj » suivie de « tout » ou d’un numéro de ligne.

R1.01 – TP5 – 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.

R1.01 – TP5 – 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.

R1.01 – TP5 – 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).

R1.01 – TP5 – 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.

R1.01 – TP5 – 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.

R1.01 – TP5 – 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.