Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 05.03.2020
Сообщений: 24
1

как сделать чтоб выводилось содержимое словаря на экран с подведением итогов в конце списка–сколько слов содержится

11.05.2020, 20:57. Просмотров 164. Ответов 0
Метки c++ (Все метки)


// Англо-русский словарь.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//

#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <fstream>
#include <thread>
#include <mutex>
#include <conio.h>
#include <sstream>
using namespace std;
mutex Locker;// разделение оступа к общим ресурсом
multimap <string, string> slov;
bool SlovarBookChanged = false;// пользователь внес изменения в записную книжку
bool SaveResult = true;// результат сохранения записной книжкки, возвращает из потокка
bool ExitProc = false; //сигнализирует о том надо завершать программу
string FN = "book.txt";
string Replace(string Source, char c1, char c2)
{
for (int i = 0; i < Source.length(); i++)
if (Source[i] == c1) Source[i] = c2;
return Source;
}
void SetSlovar(string SLO, string perevod)
{
Locker.lock();
slov.insert(make_pair(SLO, perevod));// присваивание вектора. ссылка на вектор по ключу, и добавляем новый элемент к фамилии
SlovarBookChanged = true;
Locker.unlock();
}
void PrintSlovar()
{
system("cls");
auto i = slov.begin();
while (i != slov.end())
{
string slovo = i->first;
cout << "Слово: " << i->first << endl;
while (i != slov.end() && i->first == slovo)
{
cout << "\t Перевод: " << i->second << endl;
i++;
}
}
cout << endl << "Нажмите любую клавишу...";
_getch();
}
bool SaveSlovarBook(string FileName)
{
ofstream f(FileName);
if (f)
{
for (auto i : slov)
{
string s = Replace(i.first, ' ', '_');
string s1 = Replace(i.second, ' ', '-');
f << s << "\t" << s1 << endl;
}
f.close();
return true;
}
return false;
}
void LoadSlovarBook(string FileName)
{
ifstream f(FileName);
string s, s1;
if (f)
{
while (f >> s >> s1)
{
s = Replace(s, '_', ' ');
slov.insert(make_pair(s, s1));
}
f.close();
}
}
void SaverThreadProc(bool& result)
{
while (!ExitProc)
{
if (SlovarBookChanged)
{
result = SaveSlovarBook(FN);
Locker.lock();
SlovarBookChanged = false;
Locker.unlock();
}
int c = clock();
int c2;
do
{
this_thread::yield();
c2 = clock();
} while (c2 - c < 10000 && !ExitProc);
}
if (SlovarBookChanged)
{
result = SaveSlovarBook(FN);
}
}
char MainMenu()
{
system("cls");
cout << "1. Добавить/изменить слово" << endl;
cout << "2. Вывод списка слов" << endl;
cout << "3. Удалить слово" << endl;
cout << "0. Выход" << endl;
cout << "Ваш выбор >>";
return _getch();
}
void DoSetSlovar()
{
string n, t;
system("cls");
cout << "Введите слово: ";
getline(cin, n);
cout << "Введите перевод: ";
getline(cin, t);
SetSlovar(n, t);
}
void DeleteSlovar()
{
string n;
system("cls");
cout << "Введите слово: ";
getline(cin, n);
if (slov.count(n) == 0) {
cout << "Слово не найдено. Нажмите любую клавишу...";
_getch();
return;
}
Locker.lock();
slov.erase(n);
SlovarBookChanged = true;
Locker.unlock();
cout << "Слово успешно удалено. Нажмите любую клавишу...";
_getch();
}
int main()
{
system("chcp 1251");
LoadSlovarBook(FN);
thread BackgroungSaver(SaverThreadProc, ref(SaveResult));
char key = 0;
while (key != '0')
{
key = MainMenu();
switch (key)
{
case '1':
DoSetSlovar();
break;
case '2':
PrintSlovar();
break;
case '3':
DeleteSlovar();
break;
}
}
ExitProc = true;
if (BackgroungSaver.joinable()) BackgroungSaver.join();
if (SaveResult)
cout << "\n\n Словарь успешно записана в файл. Нажмите любую клавишу...";
else
cout << "\n\nОшибка записи словаря. Нажмите любую клавишу...";
_getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2020, 20:57
Ответы с готовыми решениями:

Сделать, чтоб по окончании работы программы, в ComboBox автоматически выводилось первое значение из списка
Всем привет, никак не получается разобраться с ComboBox. Задача следующая, во время выполнения...

Как сделать, чтоб выводилось сообщение с четной цифрой(цифрами)
Console.Write(&quot;Введите a - &quot;); double a = double.Parse(Console.ReadLine());...

Как сделать так, чтобы в конце выводилось количество ненулевых элементов массива?
Здравствуйте! Я тут задание выполняю, есть один вопрос : как сделать так, чтобы в конце выводилось...

Как сделать чтоб для каждого Задания выводилось свое время завершения?
Есть таблица Таскс в которой хранятся название задачи и проект задачи. Есть таблица Таймс,в ней...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2020, 20:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

как сделать так чтоб если яцейки в столбце одинаковые не выводилось полная строка?
Добрый вечер... ломаю голову у меня есть база... есть ячейки которые одинаквые как сделать так...

Как сделать чтобы выводилось имя и долг человека в конце программы, когда должников не один а несколько?
Это задача в которой ввожу количество пользователей,имя и долг.У кого долг больше 30000...

Как сделать так, чтобы в конце записи каждого столбца, выводилось сумма столбца?
добрый день. таблица_1 (№, имя_клиента, приход, расход); надо написать запрос, чтобы в конце...

как сделать чтоб курсор был в конце поля
Устанавливаю фокус на поле в форме frm.SetFocus И выделяется все поле синеньким, хотелось...

Как сделать чтоб когда разворачиваеш програму на весь экран чтоб Edit1 увеличивался
Впринципе вопрос в заголовке

Как сделать чтоб текст начинался с начала картинки а не в конце
Ребят кто знает как сделать чтоб текст начинался с начала картинки а не в конце &lt;/font&gt; &lt;p&gt; &lt;img...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.