C++: Correction avaleur et decoupeur de flot

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
class Avaleur {
public:
  Avaleur (char end) {
    endDelims_ += end;
  }
  Avaleur (const char * end) : endDelims_(end) {
  }
  char avale(istream & _in) {
    while (_in.good()) {
      char curr = _in.get();
      if (isEndChar(curr)) {
return curr;
      }
      buffer_ += curr;
    }
  }
  string buffer() const { return buffer_; }
 
private:
  bool isEndChar(char c) {
    for (int i = 0; i < endDelims_.size(); i++) {
      if (endDelims_[i]==c) {
return true;
      }
    }
    return false;
  }
  string endDelims_;
  string buffer_;
};
 
ostream & operator << (ostream & _out, const Avaleur & _avaleur) {
  return _out << _avaleur.buffer();
}
 
istream & operator >> (istream & _in, Avaleur & _avaleur) {
  _avaleur.avale(_in);
  return _in;
}
 
class Decoupeur {
public:
  Decoupeur(const char * endToken, const char * endOfAll) 
    : endDelims_(endToken), endOfAll_(endOfAll) { endDelims_ += endOfAll_; }
 
  char avale(istream & _in) {
    while (_in.good()) {
      Avaleur av(endDelims_.c_str());
      char end = av.avale(_in);
      tokens_.push_back(av.buffer());
      if (isEndOfAll(end)) {
return end;
      }
    }
  }
  vector<string> tokens() const { return tokens_; }
  int size() const { return tokens_.size(); }
  string operator [] (int pos) const {
    return tokens_[pos];
  }
 
private:
  bool isEndOfAll(char c) {
    for (int i = 0; i < endOfAll_.size(); i++) {
      if (endOfAll_[i]==c) {
return true;
      }
    }
    return false;
  }
  string endOfAll_;
  string endDelims_;
  vector<string> tokens_;
};
 
istream & operator >> (istream & _in, Decoupeur & _decoupeur) {
  _decoupeur.avale(_in);
  return _in;
}
 
 
 
main() {
 
  cout << "TEST 1" << endl;
  Avaleur mangeTout1('.');
  mangeTout1.avale(cin);
  cout << mangeTout1.buffer() << endl;
 
  cout << "TEST 2" << endl;
  Avaleur mangeTout2('.');
  cin >> mangeTout2;
  cout << mangeTout2 << endl;
 
  cout << "TEST 3" << endl;
  Avaleur mangeTout3(".;:");
  mangeTout3.avale(cin);
  cout << mangeTout3.buffer() << endl;
 
  cout << "TEST 4" << endl;
  Avaleur mangeTout4(".;:");
  cin >> mangeTout4;
  cout << mangeTout4 << endl;
 
  cout << "TEST 5" << endl;
  Decoupeur decoup(";.", " ");
  cin >> decoup;
  for (int i = 0; i < decoup.size(); i++) {
    cout << decoup[i] << endl;
  }
}