//Készítette:    Gregorics Tibor
//Dátum:         2009.01.23.
//eha kód:       EHACODE.ELTE
//mail:          gt@inf.elte.hu
//csoport:       0.csoport
//Feladat:       1.beadandó/0.feladat
//               Megadott nevekről döntsük el, vajon csupa "Ibolya" név-e!

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

bool AllIbolya(const vector<string> t);
bool ReadFromFile(const string &fname, vector<string> &t);

int main(int argc, char *argv[])
{
    char ch;
    do{
        vector<string> t;

    // Adatok beolvasása fájlból
        string fname;
        if(argc>1)
            fname = argv[1];
        else{
            cout << "Adja meg a szöveges fájl nevét: ";
            cin >> fname;
        }
        if (!ReadFromFile(fname, t)) break;

    // Kiértékelés és kiíratás
        if(AllIbolya(t)) cout << "Minden név Ibolya"          << endl;
        else             cout << "Van Ibolyától eltérő név is"<< endl;

        cout << endl << "Futtassam újra? (I/N) "; cin  >> ch;

    }while(ch!='n' && ch!='N');

    return 0;
}

//Feladat:      Sztringeket tartalmazó tömb (vector) feltöltése szöveges állományból
//Tevékenység:  Megnyitja a megadott szöveges állományt (sikertelen kísérlet esetén hibát jelez)
//              majd a fájlból egymás után beolvassa az összes elválasztójelekkel határolt sztringet
//              és elhelyezi azokat egy tömbben (vector-ban)
//Bemenő adat:  string fname - szöveges állomány neve
//Kimenő adat:  vector<string> t
//              bool ok - sikerült-e az állomány megnyitása (visszatérési értékként)
bool ReadFromFile(const string &fname, vector<string> &t)
{
    ifstream x(fname.c_str());
    if(x.fail()){
        cout << "Hibás fájlnév!"<< endl;
        return false;
    }

    string name;
    x >> name;
    while(!x.eof()){
        t.push_back(name);
        x >> name;
    }
    // Ha nem volt az utolsó sor végén sorvége jel:
    if (!x.fail()) t.push_back(name);
    return true;
}

//Feladat:      Eldönti, hogy csupa "Ibolya" névből áll-e egy sztringeket tartalmazó tömb
//Tevékenység:  Optimista lineáris kereséssel megvizsgálja, hogy csupa "Ibolya" névből áll-e
//              a megadott tömb (vector)
//Bemenő adat:  vector<string> t
//Kimenő adat:  bool l - a válasz visszatérési értékként
bool AllIbolya(const vector<string> t)
{
    bool l = true;
    for(int i=0; l && i<(int)t.size(); ++i){
        l = t[i]=="Ibolya";
    }

    return l;
}
