Dzzirt / OOP

0 stars 0 forks source link

Замечания по программе Dictionary #10

Open alexey-malov opened 8 years ago

alexey-malov commented 8 years ago
void OpenDictionary(string filename)
{
    cout << "Ââåäèòå ñëîâî íà àíãëèéñêîì ÿçûêå è ÿ âàì åãî ïåðåâåäó." << endl;
    map<string, string> dict = GetMapFromFile(filename);
    map<string, string> newWords;
    string enWord;
    bool needToSave = false;
    size_t saveFrom = dict.size();
    getline(cin, enWord);
    while (enWord != "...")
    {
        if (dict.find(enWord) == dict.end())
        {
            needToSave = AddTranslation(enWord, dict, newWords);
        }
        else
        {
            cout << dict.at(enWord) << endl;
        }
        getline(cin, enWord);
    }
    if (needToSave)
    {
        AskAndSave(filename, newWords);
    }
}
alexey-malov commented 8 years ago
map<string, string> GetMapFromFile(string filename)
{
    map<string, string> dict;
    string key;
    string val;
    ifstream in(filename);
    while (in >> key >> val)
    {
        dict.insert({ key, val });
    }
    return dict;
}
dict.emplace(move(key), move(value));
alexey-malov commented 8 years ago
void AskAndSave(string filename, map<string, string> & newWords)
{
    ofstream out(filename, ios_base::app);
    string save;
    cout << "Ñîõðàíèòü ñëîâàðü ïåðåä âûõîäîì? Äà / Íåò" << endl;
    getline(cin, save);
    if (save == "Äà")
    {
        for (auto & pair : newWords)
        {
            out << pair.first << " " << pair.second << endl;
        }
        out.close();
        cout << "Èçìåíåíèÿ óñïåøíî ñîõðàíåíû. Äî ñâèäàíèÿ." << endl;
    }
}

строку и мап следует принимать по константной ссылке Функция выполняет 2 действия, что следует из ее имени Варианты решения:

alexey-malov commented 8 years ago
bool AddTranslation(string enWord, map<string, string> & dict, map<string, string> & newWords)
{
    string ruWord;
    cout << "Íåèçâåñòíîå ñëîâî " << enWord << ". Ââåäèòå ïåðåâîä èëè ïóñòóþ ñòðîêó äëÿ îòêàçà." << endl;
    getline(cin, ruWord);
    if (!ruWord.empty())
    {
        newWords.insert({ enWord, ruWord });
        dict.insert({ enWord, ruWord });
        cout << "Ñëîâî \"" << enWord << "\" ñîõðàíåíî â ñëîâàðå êàê \"" << ruWord << "\"." << endl;
        return true;
    }
    else
    {
        cout << "Ñëîâî " << enWord << " ïðîèãíîðèðîâàíî!" << endl;
    }
    return false;
}

Словарь в программе фактически, представлен в виде 2-х map-ов - общий словарь и словарь новых слов. Имело бы смысл ввести сущность "Словарь" в виде структуры или класса. Тогда работать со словарем станет удобнее

alexey-malov commented 8 years ago

Программа неправильно считывает и сохраняет словосочетания в словарь

alexey-malov commented 8 years ago

k=0,65

Dzzirt commented 8 years ago

Fixed