Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198

Сортировка слов в файле

22.09.2020, 20:59. Показов 3554. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане. Делаю программу, словарь английских слов. Вот код программы.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <fstream>
#include <iostream>
#include <Windows.h>
#include <string>
 
using namespace std;
 
class Dict
{
private:
    char eng[300];
    char rus[300];
    char probel = ' ';
    char enter = '\n';
    
    string line;
    
 
public:
    void getWord()
    {
       
        
            cout << "Введите слово на английском:\n> ";
            cin >> eng;
            cout << "Введите слово на русском:\n> ";
            cin >> rus;
            
            ofstream dict("slovar.txt", ios_base::app);
            dict << eng;
            dict << probel;
            dict << rus;
            dict << enter;
           
            dict.close();
    }
 
    void readWord()
    {
        ifstream in("slovar.txt");
        if (in.is_open())
        {
            while (getline(in, line))
            {
                cout << line << endl;
            }
        }
        in.close();
    }
};
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Dict d1;
 
    int input=3;
 
    while (input != 0)
    {
        cout << "Выберите действие: записать слова-1, посмотреть словарь-2, выход из программы-0:";
        cin >> input;
        switch (input)
        {
        case 1: d1.getWord();
            break;
        case 2: d1.readWord();
            break;
        }
    }
    cout << "Конец программы!" << endl;
    return 0;
}

Вывод программы
Нужно отсортировать английские слова по алфавиту, как это реализовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2020, 20:59
Ответы с готовыми решениями:

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не могу понять почему не работает: ...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов РФ. Оба txt 2. Найти в запросах все...

Поиск слов по маске в строке, их удаление, сортировка оставшихся слов
Доброго времени суток. Помогите, пожалуйста, реализовать задачу. нужно из текстового файла считать текст, потом по введенной пользователем...

47
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.09.2020, 12:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nemo19 Посмотреть сообщение
Здравствуйте, форумчане. Есть вопрос. Я через std::map записываю в файл слова. Если я это делаю командой ios_base::out, то все нормально, но эта команда не сохранят запись при новом запуске программы, перезаписывает. Если записываю командой ios_base::app, слова записываются, но почему то слова дублируются. Подскажите как исправить?
Нужно при старте программы всегда начитывать файл dict.txt. Не вижу, чтоб ты это вообще где-то делал
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
29.09.2020, 13:22  [ТС]
Что значит начитывать?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.09.2020, 13:24
Цитата Сообщение от nemo19 Посмотреть сообщение
Что значит начитывать?
Считать слова из файла в std::map. При помощи std::ifstream
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
29.09.2020, 13:55  [ТС]
Я наверное повторяюсь, да я повторяюсь. Добавил этот метод.
C++
1
2
3
4
5
6
7
8
9
void inMap()
    {
        std::ifstream infile("dict.txt");
        std::string key;
        string value;
        std::map<std::string, string> dict;
        while (infile >> key >> value)
            dict[key] = value;
    }
он у меня идет после записи в файл.

Результат что записывается в файл:
map-карта
map-карта
name-имя
map-карта
name-имя
time-время
Как это победить не знаю?
Нужно:
map-карта
name-имя
time-время
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.09.2020, 14:00
Цитата Сообщение от nemo19 Посмотреть сообщение
он у меня идет после записи в файл.
Цитата Сообщение от nemo19 Посмотреть сообщение
Как это победить не знаю?
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Нужно при старте программы всегда начитывать файл dict.txt
C++
1
2
3
4
5
6
7
8
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Dict d1;
    d1.inMap();
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
29.09.2020, 15:08  [ТС]
Спасибо, помогло, но это если делать одну запись, а потом опять запускать программу. Мне нужно в цикле,но в цикле то как раз и появляются дублированные слова, попробую применть, другой цикл.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.09.2020, 15:15
Цитата Сообщение от nemo19 Посмотреть сообщение
Спасибо, помогло, но это если делать одну запись, а потом опять запускать программу. Мне нужно в цикле,но в цикле то как раз и появляются дублированные слова, попробую применть, другой цикл.
В смысле, одну запись? Покажи, как сделал
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
29.09.2020, 15:29  [ТС]
Запись одной пары слов.
C++
1
2
3
4
5
Dict d1;
 
    d1.getWords();
    d1.inMap();
    d1.showWords();
Запись в цикле, сколько угодно пар слов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int input=3;
 
    while (input != 0)
    {
        cout << "Выберите действие: записать слова-1, посмотреть словарь-2, выход из программы-0:";
        cin >> input;
        switch (input)
        {
        case 1: 
        
            d1.getWords();
            d1.inMap();
            
        case 2: 
            d1.showWords();
            break;
        }
    }
    cout << "Конец программы!" << endl;
В цикле пары дублируются.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.09.2020, 15:34
Лучший ответ Сообщение было отмечено nemo19 как решение

Решение

Цитата Сообщение от nemo19 Посмотреть сообщение
Запись в цикле, сколько угодно пар слов.
Во-первых, убери из getWords вызов writeWords

Добавлено через 31 секунду
Во-вторых
C++
1
2
3
4
5
6
       case 1: 
        
            d1.getWords();
            ///////////////////d1.inMap();
            
        case 2:
Добавлено через 1 минуту
В-третьих
C++
1
2
dl.writeWords();
 cout << "Конец программы!" << endl;
1
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
29.09.2020, 16:20  [ТС]
Вроде все работает, буду разбираться с сортировкой по алфавиту.
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
30.09.2020, 02:08  [ТС]
Сделал сортировку слов. Слова закидываю в vector, сортирую и записываю в другой файл, но опять проблема, последнее введенное слово, опять дублируется, как это исправить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <fstream>
#include <iostream>
#include <Windows.h>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
 
using namespace std;
 
class Dict
{
private:
    map<string, string> dict;
 
    string eng;
    string rus;
    //string word;
 
public:
 
 //функция записи в файл
    void writeWords()
    {
        ofstream out("dict.txt", ios_base::app);
        for (map<string, string>::iterator i = dict.begin(); i != dict.end(); ++i)
        {
            out << i->first << '-' << i->second << std::endl;
        }
        out.close();
    }
   
    //функция ввода новых слов
    void getWords()
    {
        cout << "Введите слово на английском:\n> ";
        cin >> eng;
        cout << "Введите слово на русском:\n> ";
        cin >> rus;
        dict[eng] = rus;
    }
 
  //вывод map
    void showWordsinMap()
    {
        for (auto it = dict.begin(); it != dict.end(); ++it)
        {
            cout << it->first << " - " << it->second << endl;
        }
    }
 
    //сортировка слов и запись в другой файл
    void sortWords()
    {
        string str;
        vector<string> stringfile;
        ifstream outFile("dict.txt");
 
        while (!outFile.eof())
        {
            outFile >> str;
            stringfile.push_back(str);
        }
        outFile.close();
 
        sort(stringfile.begin(), stringfile.end());
 
        ofstream out("total.txt", ios_base::out);
        copy(stringfile.begin(), stringfile.end(), ostream_iterator<string>(out, "\n"));
        out.close();
        
        
        /*
        for (int i = 0; i < stringfile.size()-1; ++i)
        {
            cout << stringfile[i] << endl;
        }
        */
    }
 
    //вывод исходного отсортированного файла
    void showWords()
    {
        string word;
        ifstream in("total.txt"); 
        if (in.is_open())
        {
            while (getline(in, word))
            {
                cout << word << endl;
            }
        }
        in.close();    
    }
};
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Dict d1;
    
    int input=3;
 
    while (input != 0)
    {
        cout << "Выберите действие: записать слова-1, посмотреть словарь-2, выход из программы-0:";
        cin >> input;
        switch (input)
        {
        case 1: 
            d1.getWords();
            break;
        case 2: 
            d1.showWords();
            break;
        }
    }
    d1.writeWords();
    d1.sortWords();
    
    cout << "Конец программы!" << endl;
    
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.09.2020, 10:42
Цитата Сообщение от nemo19 Посмотреть сообщение
Сделал сортировку слов. Слова закидываю в vector, сортирую и записываю в другой файл, но опять проблема, последнее введенное слово, опять дублируется, как это исправить?
Не надо там ничего закидывать ни в какой вектор. Это раз.
Второе - а где здесь метод inMap()? Тебе только он и нужен был.
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
30.09.2020, 14:54  [ТС]
Мне нужно скопировать файл в map, отсортировать и потом вывести в консоль?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.09.2020, 15:02
Цитата Сообщение от nemo19 Посмотреть сообщение
Мне нужно скопировать файл в map, отсортировать и потом вывести в консоль?
В map он уже будет отсортированным
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
30.09.2020, 17:40  [ТС]
Oleg-m1973, то есть, вот этого достаточно, для того чтобы слова были сортированы и плюс вывести? Или нужно еще что то?
C++
1
2
3
4
5
6
7
8
9
void inMap()
    {
        std::ifstream infile("dict.txt");
        std::string key;
        string value;
        std::map<std::string, string> dict;
        while (infile >> key >> value)
            dict[key] = value;
    }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.09.2020, 17:42
Цитата Сообщение от nemo19 Посмотреть сообщение
Oleg-m1973, то есть, вот этого достаточно, для того чтобы слова были сортированы и плюс вывести? Или нужно еще что то?
C++
1
2
3
4
5
6
7
8
9
void inMap()
    {
        std::ifstream infile("dict.txt");
        std::string key;
        string value;
        ///////////////std::map<std::string, string> dict;
        while (infile >> key >> value)
            this->dict[key] = value;
    }
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
01.10.2020, 08:06  [ТС]
Спасибо, буду проверять.

Добавлено через 5 часов 39 минут
Ничего не получилось, буду разбираться дальше.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
01.10.2020, 11:12
Цитата Сообщение от nemo19 Посмотреть сообщение
Ничего не получилось, буду разбираться дальше.
Что конкретно не получилось?
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
02.10.2020, 16:34  [ТС]
Происходит дублирование строк.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.10.2020, 16:42
Цитата Сообщение от nemo19 Посмотреть сообщение
Происходит дублирование строк.
Не должно. Покажи, как сделал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2020, 16:42

Сортировка слов в файле
Помогите пожалуйста решить задачу на сортировку слов в файле. Дан файл который содержит слова разделенные пробелами или каждое слово...

Сортировка слов в файле на ассемблере
Подскажите пожааалуйста как написать программу на MASM32, которая создает новый поток, который сортирует слова в строке в порядке...

Сортировка текста в файле; частота появления слов
Добрый день! На PowerShelle надо реализовать такое вот задание: &quot;Отсортировать слова в текстовом файле (10 страниц) по убыванию, вывести...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов РФ. Оба txt (для Excel пусть не файлы,...

Поиск определенных слов в ТХТ файле, и запись этих слов (если найдено) в отдельный файл
К примеру, есть файл &quot;Text.txt&quot;. В нем есть 1000 строк. Если какая-то строка = привет, то echo Привет &gt;&gt; Output.txt Как это...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru