// FONCTION
void NoyauPascal::calcul_taille()
{
    int coefP = getCoef();
    setTaille(1);
    while (coefP > 1)
    {
        coefP = (int) coefP/2;
        setTaille(getTaille()+1);
    }
    setTaille(getTaille()*2 - 1);
}
String& String::operator=(const char* _chaine){
    taille = getTaille(_chaine);
    delete[] chaine;
    chaine = new char[taille + 1];
    for(unsigned int i = 0; i < taille; i++) {chaine[i] = _chaine[i];}
    chaine[taille] = FINCHAINE;
    return *this;
}
String::String(const char* _chaine) : taille(0) {

    compteurInstance(true);

    taille = getTaille(_chaine);

    chaine = new char[taille + 1];

    for (unsigned int i = 0 ; i < taille + 1; i++) chaine[i] = _chaine[i];

}
//on peut aussi utiliser sousChaine() et l'opérateur + pour créer cette méthode
String& String::enleverChaine(const char* _chaine) const{

    String* tmp = new String("Vide");
    String& chaineRetour = *tmp;

    unsigned int tailleChaine = getTaille(_chaine);

    if (isVide() || tailleChaine > taille || tailleChaine == 0) return chaineRetour;

    int* posDepart = new int[taille]; //pour stocker les positions de départ des chaines à retirer
    for(unsigned int i = 0; i < taille; i++) posDepart[i] = -1;

    unsigned int nbRencontres = 0;
    bool sousChaine;

    for (unsigned int i = 0; i < taille; i++)
    {
        sousChaine = true;

        //on vérifie si les char sont =
        for(unsigned int j = 0; j < tailleChaine; j++)
        {
            if(chaine[i+j] != _chaine[j] || chaine[i+j] == FINCHAINE)
            {
                sousChaine = false;
                posDepart[i] = -1;
                break;
            }
        }

        if(sousChaine == true)
        {
            posDepart[i] = i;
            nbRencontres++;
            i = i + tailleChaine - 1;
        }
    }

    unsigned int nouvTaille = (taille - nbRencontres*tailleChaine);
    char* nouvChaine = new char[nouvTaille + 1];

    int ecrire = 0;
    for(unsigned int i = 0; i < taille; i++)
    {

        if(posDepart[i] >= 0) i += (tailleChaine - 1);
        else
        {
            nouvChaine[ecrire] = chaine[i];
            ecrire++;
        }
    }

    nouvChaine[nouvTaille] = FINCHAINE;

    chaineRetour = nouvChaine;

    delete[] nouvChaine;
    delete[] posDepart;

    return chaineRetour;
}