// 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; }