M1102 – TP3 Corrigés

#include <iostream>
#include <vector>
#include <cctype>
#include "EasyAssert.h"

using namespace std;

unsigned TrouveCarDansStr (const char & Caract,
const string & Chaine,
const unsigned & Debut)
{
unsigned Pos (Debut);
for (; Pos < Chaine.size() && Chaine[Pos] != Caract; Pos = Pos + 1);
return Pos;
}//TrouveCarDansStr ()

vector<unsigned> ComptEnsembleDansChaine (const string & ChaineACompter, const string & ChaineDeComptage)
{
vector <unsigned> VecCpt (ChaineACompter.size());
for (const char & Carac : ChaineDeComptage)
{
unsigned Pos (TrouveCarDansStr(Carac, ChaineACompter,0));
if (Pos != ChaineACompter.size())
{
VecCpt[Pos] = VecCpt [Pos] + 1;
}
}
return VecCpt;
}// ComptEnsembleDansChaine()

void TestComptEnsembleDansChaine ()
{
string Chaine  ("Ma jolie chaine");
string Voyelle ("aeiouy");
vector <unsigned> VCpt (ComptEnsembleDansChaine (Voyelle, Chaine));
EASY_ASSERT (VCpt [0] == 2); //a
EASY_ASSERT (VCpt [1] == 2); //e
EASY_ASSERT (VCpt [2] == 2); //i
EASY_ASSERT (VCpt [3] == 1); //o
EASY_ASSERT (VCpt [4] == 0); //u
EASY_ASSERT (VCpt [5] == 0); //y
}//TestComptEnsembleDansChaine ()

unsigned CompterDoublonsV1 (const string & Chaine)
{
unsigned Cpt (0);
for (unsigned i (1); i < Chaine.size(); i = i + 1)
{
if (isspace(Chaine[i])) continue;
if (Chaine[i] == Chaine [i - 1])
{
Cpt = Cpt + 1;
}
}
return Cpt;
}// CompterDoublonsV1 ()

unsigned CompterDoublonsV2 (const string & Chaine)
{
unsigned Cpt (0);
unsigned i (1);
while (i < Chaine.size())
{
if (!isspace(Chaine[i]) && Chaine[i] == Chaine [i - 1])
{
Cpt = Cpt + 1;
}
i = i + 1;
}
return Cpt;
}// CompterDoublonsV2 ()

unsigned CompterDoublonsV3 (const string & Chaine)
{
unsigned Cpt (0);
for (unsigned i (0); i < Chaine.size() - 1; i = i + 1)
{
if (isspace(Chaine[i])) continue;
if (Chaine[i] == Chaine [i + 1])
{
Cpt = Cpt + 1;
}
}
return Cpt;
}// CompterDoublonsV3 ()

unsigned CompterDoublonsV4 (const string & Chaine)
{
unsigned Cpt (0);
unsigned i (0);
while (i < Chaine.size() - 1)
{
if (!isspace(Chaine[i]) && Chaine[i] == Chaine [i + 1])
{
Cpt = Cpt + 1;
}
i = i + 1;
}
return Cpt;
}// CompterDoublonsV4 ()

void TestCompterDoublons ()
{
string Chaine ("aaab cc defff");
EASY_ASSERT (CompterDoublonsV1(Chaine) == 5);
EASY_ASSERT (CompterDoublonsV1(Chaine) == CompterDoublonsV2(Chaine));
EASY_ASSERT (CompterDoublonsV3(Chaine) == CompterDoublonsV4(Chaine));
EASY_ASSERT (CompterDoublonsV1(Chaine) == CompterDoublonsV3(Chaine));

Chaine = "Ma jolie chaine";
EASY_ASSERT (CompterDoublonsV1(Chaine) == 0);
EASY_ASSERT (CompterDoublonsV1(Chaine) == CompterDoublonsV2(Chaine));
EASY_ASSERT (CompterDoublonsV3(Chaine) == CompterDoublonsV4(Chaine));
EASY_ASSERT (CompterDoublonsV1(Chaine) == CompterDoublonsV3(Chaine));

Chaine = "aaaaa";
EASY_ASSERT (CompterDoublonsV1(Chaine) == 4);
EASY_ASSERT (CompterDoublonsV1(Chaine) == CompterDoublonsV2(Chaine));
EASY_ASSERT (CompterDoublonsV3(Chaine) == CompterDoublonsV4(Chaine));
EASY_ASSERT (CompterDoublonsV1(Chaine) == CompterDoublonsV3(Chaine));

}// TestCompterDoublons ()

int main()
{
//TestComptEnsembleDansChaine ();
TestCompterDoublons ();
return 0;
}

M1102 – TP3 – Exercice 2

Coder les quatre fonction CompterDoublons () de l’exercice 3 du TD5 :

  1. une qui compare le caractère courant avec son suivant en utilisant une boucle for;
  2. une qui compare le caractère courant avec son suivant en utilisant une boucle while;
  3. une qui compare le caractère courant avec son précédant en utilisant une boucle for;
  4. une qui compare le caractère courant avec son précédant en utilisant une boucle while;

La signature de cette fonction est la suivante :

unsigned CompterDoublonsVX (const string & Chaine)

Ecrivez une fonction de test à l’aide de easyassert.