С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 28.09.2024
Сообщений: 3

Создание латинско-английского словаря из англо-латинского

12.10.2024, 22:25. Показов 880. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский словарь. Английский он к тому времени знал в совершенстве, и его мечтой было изучить латынь. Поэтому попавшийся словарь был как раз кстати.

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

Как известно, словарь состоит из переводимых слов, к каждому из которых приводится несколько слов-переводов. Для каждого латинского слова, встречающегося где-либо в словаре, Вася предлагает найти все его переводы (то есть все английские слова, для которых наше латинское встречалось в его списке переводов), и считать их и только их переводами этого латинского слова.

Помогите Васе выполнить работу по созданию латинско-английского словаря из англо-латинского.
Входные данные

apple - malum, pomum, popula
fruit - baca, bacca, popum
punishment - malum, multa
Результат работы

7
baca - fruit
bacca - fruit
malum - apple, punishment
multa - punishment
pomum - apple
popula - apple
popum - fruit



ПРОШУ
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2024, 22:25
Ответы с готовыми решениями:

Переделка англо-латинского словаря в латинско-английский
Здравствуйте, уважаемые участники форума. Мне нужна ваша помощь вот по какой задаче с образовательного сайта: Однажды, разбирая...

Создание англо-русского словаря
Другу задали курсовой создать англо-русский словарь, реализовал начало через std::set, но есть один нюанс в задании написано...

Англо-Латинский и Латинско-Английский словарь
В общем, нам дано число n - количество англ слов. Затем в каждой строчке дается само англ. слово и его перевод на Латиницу (Обычный...

6
 Аватар для OlegChe
73 / 55 / 25
Регистрация: 12.07.2014
Сообщений: 216
13.10.2024, 08:54
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
#include <iostream>
#include <map>
#include <set>
#include <sstream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main() {
    vector<string> input = {
        "apple - malum, pomum, popula",
        "fruit - baca, bacca, popum",
        "punishment - malum, multa"
    };
 
    map<string, set<string>> latin_to_english;
 
    for (const auto& line : input) {
        size_t dash_pos = line.find(" - ");
        string english_word = line.substr(0, dash_pos);
        string latin_words_str = line.substr(dash_pos + 3);
 
        stringstream ss(latin_words_str);
        string latin_word;
        while (getline(ss, latin_word, ',')) {
            latin_word.erase(0, latin_word.find_first_not_of(" "));
            latin_word.erase(latin_word.find_last_not_of(" ") + 1);
            latin_to_english[latin_word].insert(english_word);
        }
    }
 
    cout << latin_to_english.size() << endl;
    for (const auto& [latin_word, english_words] : latin_to_english) {
        cout << latin_word << " - ";
        for (auto it = english_words.begin(); it != english_words.end(); ++it) {
            if (it != english_words.begin()) cout << ", ";
            cout << *it;
        }
        cout << endl;
    }
 
    return 0;
}
0
Заблокирован
13.10.2024, 12:21
OlegChe, как то много лишних телодвижений...

С++11+
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
#include <iostream>
#include <map>
#include <set>
#include <sstream>
 
int main() {
   std::map<std::string, std::set<std::string>> dic;
   {
      std::string input;   
      while(std::getline(std::cin, input)){
         std::istringstream iss(input);
         std::string english_word, latin_word;
         iss >> english_word; // read english word
         iss >> latin_word; // skip dash
         while(iss >> latin_word) // reads latin words
            dic[latin_word.substr(0, latin_word.size() - 1)].insert(english_word);
      }
    }
 
    std::cout << dic.size() << std::endl;
    for (const auto data : dic) {
      std::cout << data.first << " - ";
      auto word_it = data.second.begin();
      auto end     = data.second.end();
      std::cout << *word_it++;
      while(word_it != end)
         std::cout << ", " << *(word_it++);
      std::cout << std::endl;
    }
}
0
0 / 0 / 0
Регистрация: 28.09.2024
Сообщений: 3
13.10.2024, 19:32  [ТС]
Спасибо , можете пожалуйста это сделать не только со словами из примера а с любыми строками пожалуйста прошу

Добавлено через 32 минуты
OlegChe
0
Заблокирован
13.10.2024, 19:32
Kamila2012, так и работает с любыми словами.
В чем вопрос и просьба?
0
0 / 0 / 0
Регистрация: 28.09.2024
Сообщений: 3
13.10.2024, 19:34  [ТС]
почему-то ваш код первый тест не проходит (((((
0
Заблокирован
13.10.2024, 19:45
Цитата Сообщение от Kamila2012 Посмотреть сообщение
почему-то ваш код первый тест не проходит
Сейчас исправим.

Добавлено через 4 минуты
Воть:
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
#include <iostream>
#include <map>
#include <set>
#include <sstream>
 
int main() {
   std::map<std::string, std::set<std::string>> dic;
   {
      std::string input;   
      while(std::getline(std::cin, input)){
         std::istringstream iss(input);
         std::string english_word, latin_word;
         iss >> english_word; // read english word
         iss >> latin_word; // skip dash
         while(iss >> latin_word){ // reads latin words
            if (latin_word[latin_word.size()-1] == ',')
               latin_word.pop_back();
            dic[latin_word].insert(english_word);
         }
      }
    }
 
    std::cout << dic.size() << std::endl;
    for (const auto data : dic) {
      std::cout << data.first << " - ";
      auto word_it = data.second.begin();
      auto end     = data.second.end();
      std::cout << *word_it++;
      while(word_it != end)
         std::cout << ", " << *(word_it++);
      std::cout << std::endl;
    }
}
Добавлено через 1 минуту
Цитата Сообщение от Kamila2012 Посмотреть сообщение
можете пожалуйста это сделать не только со словами из примера а с любыми строками
Вообще то, ввод могли бы и сами сделать, это не требует особых навыков и знаний.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2024, 19:45
Помогаю со студенческими работами здесь

Создание англо-русского словаря
Привет. Суть программы такая: пользователь вводит незнакомое слово и записывает его в отдельное поле &quot;для себя&quot;. Для того,...

Создание латинско-английского словаря из англо-латинского
Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский словарь. К сожалению, для полноценного изучения языка ...

Переделка англо-латинского словаря
Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский словарь. Английский он к тому времени знал в совершенстве, и...

Создать на основе англо-латинского словаря латино-английский словарь
Создать на основе англо-латинского словаря латино-английский словарь. ТО есть на основе примера ниже создать словарь на python) ...

Создать на основе англо-латинского словаря латино-английский словарь
Создать на основе англо-латинского словаря латино-английский словарь. ТО есть на основе примера ниже создать словарь на python) ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru