Форум программистов, компьютерный форум CyberForum.ru

Англо-русский словарь - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 68, средняя оценка - 4.71
Smiling_girl
 Аватар для Smiling_girl
46 / 12 / 1
Регистрация: 08.11.2010
Сообщений: 28
04.12.2010, 19:23     Англо-русский словарь #1
нужно написать программу "англо-русский и русско-английский словарь"
база данных словаря должна содержать синонимичные варианты перевода слов
программа должна обеспечит выбор посредством меню и выполнение одной из следующих функций:
- загрузка базы данных из словоря (из файла)
- выбор режима работы ( англо-русский или русско-английский)
- вывод вариантов перевода заданного английского слова
- вывод вариантов переаода заданного русского слова
- базу данных словаря реализовать в виде 2-х контейнеров типа map

я начала писать, но не знаю как сделать дальше.. помогите закончить


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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
// Anglo-rus.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "Anglo-rus.h"
 
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <string>
#include <map>
    
#include <locale>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
// Единственный объект приложения
 
CWinApp theApp;
 
using namespace std;
 
const int maxlen = 200;
class compare_m
{
public:
    bool operator() (const char *s, const char *t) const
    {
        return strcmp(s,t) <0;
    }
};
 
int map1();
typedef map <string *, string, compare_m> directype;
 
int map1(int argc, char* argv[]);
typedef map <string *, string, compare_m> directype;
 
 
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;
 
    HMODULE hModule = ::GetModuleHandle(NULL);
 
    if (hModule != NULL)
    {
        // инициализировать MFC, а также печать и сообщения об ошибках про сбое
        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
        {
            // TODO: измените код ошибки соответственно своим потребностям
            _tprintf(_T("Критическая ошибка: сбой при инициализации MFC\n"));
            nRetCode = 1;
        }
        else
        {
            // TODO: Вставьте сюда код для приложения.
            map1();
            system ("pause");
        }
    }
    else
    {
        // TODO: Измените код ошибки соответственно своим потребностям
        _tprintf(_T("Критическая ошибка: неудачное завершение GetModuleHandle\n"));
        nRetCode = 1;
    }
 
    return nRetCode;
}
 
 
 
 
void ReadInput (directype &D)
{
    
    setlocale(LC_ALL,"Russian");
    ifstream ifstr("eng.txt");
    string nr;
    char buf [maxlen], *p;
    if (ifstr)
    {
        cout << "Считанные из файла данные eng.txt:\n";
        for (;;)
        {
            ifstr >> nr;
            ifstr.get(); //пропустить пробел
            ifstr.getline (buf, maxlen);
            if (!ifstr) break;
            cout << setw(9) << nr << "  " << buf << endl;
            p = new char [strlen(buf) +1];
            strcpy (p, buf);
            D[p] = nr;
        }
    }
    ifstr.close();
}
 
void ShowCommands()
{
    cout << "Commands: \n"
        "?word          :find word translation\n"
        "/word          :delete \n"
        "!number name   :insert (or update) \n"
        "*              :list whole file \n"
        "=              :save in file\n"
        "#              :exit" << endl;
}
 
void ProcessCommands(directype &D)
{
    ofstream ofstr;
    string nr;
    char ch, buf[maxlen], *p;
    directype::iterator i;
    for (;;)
    {
        cin >> ch; //пропустить любой непечатаемый символ и прочесть ch
        switch (ch)
        {
        case '?': //cin.getline(buf, maxlen);
 
        case '/': //найти или удалить
            cin.getline (buf, maxlen);
            i=D.find(buf);
            if (i == D.end()) cout << "Not found. \n";
            else //ключ не найден
                if ( ch == '?') //команда "найти"
                    cout << "Word: " << (*i).second << endl;
                else //команда "удалить"
                {
                    delete[] (*i).first; D.erase(i);
                }
                break;
        case '!': //добавить (или обновить)
            cin >> nr;
            if (cin.fail())
            {
                cout << "Usage: !word translation\n";
                cin.clear(); cin.getline(buf, maxlen);
                break;
            }
            cin.get();
            cin.getline(buf, maxlen);
            i=D.find(buf);
            if (i == D.end())
            {
                p = new char [strlen(buf) +1];
                strcpy (p, buf);
                D[p] = nr;
            }
            else (*i).second = nr;
            break;
        case '*':
            for (i= D.begin(); i != D.end(); i++)
                cout << setw(9) << (*i).second << "  " << (*i).first << endl;
            break;
        case '=':
            ofstr.open ("eng.txt");
            if (ofstr)
            {
                for (i = D.begin(); i != D.end(); i++)
                    ofstr << setw(9) << (*i).second << "  " << (*i).first << endl;
                ofstr.close();
            }
            else cout << "Cannot open output file. \n";
            break;
        case '#':
            break;
        default:
            cout << "Use: * (list), ? (find), = (save), ""/ (delete), ! (insert), or # (exit). \n";
            cin.getline (buf, maxlen);
            break;
        }
        if (ch == '#') break;
    }
}
 
int map1()
{
    directype D;
    ReadInput (D);
    ShowCommands();
    ProcessCommands(D);
    for (directype::iterator i = D.begin(); i != D.end(); i++)
        delete[] (*i).first;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aionsnikers
4 / 4 / 1
Регистрация: 05.12.2010
Сообщений: 4
05.12.2010, 18:23     Англо-русский словарь #2
а ты можешь кинуть либы
#include "stdafx.h"
#include "Anglo-rus.h"

Добавлено через 1 час 10 минут
кинь мне либы, я быро допилю прогу
Smiling_girl
 Аватар для Smiling_girl
46 / 12 / 1
Регистрация: 08.11.2010
Сообщений: 28
05.12.2010, 23:21  [ТС]     Англо-русский словарь #3
они у меня пока что девственно чисты)
ну #include "stdafx.h" - она стандартная
я просто такой проект создала, что оно есть..

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
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // некоторые конструкторы CString будут явными
 
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // Исключите редко используемые компоненты из заголовков Windows
#endif
 
#include <afx.h>
#include <afxwin.h>         // основные и стандартные компоненты MFC
#include <afxext.h>         // Расширения MFC
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // поддержка MFC для типовых элементов управления Internet Explorer 4
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>                     // поддержка MFC для типовых элементов управления Windows
#endif // _AFX_NO_AFXCMN_SUPPORT
 
#include <iostream>
 
 
 
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
aionsnikers
4 / 4 / 1
Регистрация: 05.12.2010
Сообщений: 4
05.12.2010, 23:44     Англо-русский словарь #4
тут на сайте есть уже прога по словарю но я могу кинуть ее она полностью готова, меня заинтересовала эта прогарамка)))

Добавлено через 1 минуту
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <clocale>
#include <stdlib.h>
 
 
int main()
{
   char word[100];
   char str[100];
   char *buf1 = NULL;
   char *buf2 = NULL;
   bool find = false;
   setlocale(LC_ALL,"Russian");
   FILE *fp;
 
   if ((fp = fopen("dict.txt","r"))==NULL) {
   printf("Ошибка при открытии файла.\n");
   exit(1);
   }
 
 
   printf("Словарная база успешно открыта \n");
   printf("Введите слово для перевода \n");
   scanf("%s", &word);
 
   while (!feof(fp)) 
   {
       fgets(str, sizeof str, fp);
       buf1 = strtok(str, "=");
       buf2 = strtok(NULL, " ");
 
       if (*buf1 == *word)
           {
            printf("%s = %s" "\n", word, buf2);
            find = true;
            break;
           }
      
       if (*buf2 == *word)
       {
           printf("%s = %s" "\n", word, buf1);
           find = true;
           break;
       }
 
   }
   if (!find)
   {
      printf ("Совпадений не найдено\n");
   }
        
   fclose(fp);
   getch();
   return 0;
}
Добавлено через 14 секунд
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <clocale>
#include <stdlib.h>
 
 
int main()
{
   char word[100];
   char str[100];
   char *buf1 = NULL;
   char *buf2 = NULL;
   bool find = false;
   setlocale(LC_ALL,"Russian");
   FILE *fp;
 
   if ((fp = fopen("dict.txt","r"))==NULL) {
   printf("Ошибка при открытии файла.\n");
   exit(1);
   }
 
 
   printf("Словарная база успешно открыта \n");
   printf("Введите слово для перевода \n");
   scanf("%s", &word);
 
   while (!feof(fp)) 
   {
       fgets(str, sizeof str, fp);
       buf1 = strtok(str, "=");
       buf2 = strtok(NULL, " ");
 
       if (*buf1 == *word)
           {
            printf("%s = %s" "\n", word, buf2);
            find = true;
            break;
           }
      
       if (*buf2 == *word)
       {
           printf("%s = %s" "\n", word, buf1);
           find = true;
           break;
       }
 
   }
   if (!find)
   {
      printf ("Совпадений не найдено\n");
   }
        
   fclose(fp);
   getch();
   return 0;
}
Добавлено через 45 секунд
ычычычы

Добавлено через 41 секунду
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <clocale>
#include <stdlib.h>
 
 
int main()
{
   char word[100];
   char str[100];
   char *buf1 = NULL;
   char *buf2 = NULL;
   bool find = false;
   setlocale(LC_ALL,"Russian");
   FILE *fp;
 
   if ((fp = fopen("dict.txt","r"))==NULL) {
   printf("Ошибка при открытии файла.\n");
   exit(1);
   }
 
 
   printf("Словарная база успешно открыта \n");
   printf("Введите слово для перевода \n");
   scanf("%s", &word);
 
   while (!feof(fp)) 
   {
       fgets(str, sizeof str, fp);
       buf1 = strtok(str, "=");
       buf2 = strtok(NULL, " ");
 
       if (*buf1 == *word)
           {
            printf("%s = %s" "\n", word, buf2);
            find = true;
            break;
           }
      
       if (*buf2 == *word)
       {
           printf("%s = %s" "\n", word, buf1);
           find = true;
           break;
       }
 
   }
   if (!find)
   {
      printf ("Совпадений не найдено\n");
   }
        
   fclose(fp);
   getch();
   return 0;
}
aionsnikers
4 / 4 / 1
Регистрация: 05.12.2010
Сообщений: 4
06.12.2010, 00:18     Англо-русский словарь #5
сори не знаю как кинуть что б было как у тя)

Добавлено через 1 минуту
если есть скайп давай через него кину

Добавлено через 28 секунд
мой ник ник удален

Добавлено через 31 минуту
я не могу понять как прога работает если у тя не написана либа #include "Anglo-rus.h" и вроде #include "stdafx.h" не стандартная хотя я не знаю надо посмотреть)
Smiling_girl
 Аватар для Smiling_girl
46 / 12 / 1
Регистрация: 08.11.2010
Сообщений: 28
20.01.2011, 20:50  [ТС]     Англо-русский словарь #6
спасибо что попытался мне помочь - но к сожалению поздно ты=)
D1mex
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 16
08.05.2011, 13:01     Англо-русский словарь #7
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <clocale>
#include <stdlib.h>
#include <fstream>
#include <iostream> 
#include <string>
using namespace std;
 int main()
{
 
   int flag=0, i;
   char word[100];
   char str[100];
   char *buf1 = NULL;
   char *buf2 = NULL;
   bool find = false;
   setlocale(LC_ALL,"Russian");
   FILE *fp;
 
   if ((fp = fopen("dict.txt","r"))==NULL) {
   printf("Ошибка при открытии файла.\n");
   exit(1);
   }
 
   cout << "Введите какой требуется вариант перевода 1)En-Ru или 2)Ru-En\n";
   cin >> i;
 
   if (i=1){
       // Перевод En-Ru
   printf("Словарная база успешно открыта \n");
   printf("Введите слово для перевода \n");
   scanf("%s", &word);
 
   while (!feof(fp)) 
   {
       fgets(str, sizeof str, fp);
       buf1 = strtok(str, "=");
       buf2 = strtok(NULL, " ");
 
       if (*buf1 == *word)
           {
               for (int i=0; i < strlen(word); i++)
                   {
                   if (word[i]==buf1[i]) flag=1;
                   else {flag=0; break;
                   }
                }
            if (flag==1) {
            printf("%s = %s" "\n", word, buf2);
            find = true;
            break;
            }
           }
      
       if (*buf2 == *word)
       {
           printf("%s = %s" "\n", word, buf1);
           find = true;
           break;
       }
 
   }
   if (!find)
   {
      printf ("Совпадений не найдено\n");
   }
   } 
   
   else
      // Перевод Ru-En
   {
       printf("Словарная база успешно открыта \n");
   printf("Введите слово для перевода \n");
   scanf("%s", &word);
 
 
   while (!feof(fp)) 
   {
       fgets(str, sizeof str, fp);
       buf1 = strtok(str, "=");
       buf2 = strtok(NULL, " ");
 
       if (*buf1 == *word)
           {
               for (int i=0; i < strlen(word); i++)
                   {
                   if (word[i]==buf1[i]) flag=1;
                   else {flag=0; break;
                   }
                }
            if (flag==1) {
            printf("%s = %s" "\n", word, buf2);
            find = true;
            break;
            }
           }
      
       if (*buf2 == *word)
       {
           printf("%s = %s" "\n", word, buf1);
           find = true;
           break;
       }
 
   }
   if (!find)
   {
      printf ("Совпадений не найдено\n");
   }
   
   }     
   fclose(fp);
   getch();
   return 0;
}
помогите доделать перевод с Русского на Английский не получается не читает русский текст
Smiling_girl
 Аватар для Smiling_girl
46 / 12 / 1
Регистрация: 08.11.2010
Сообщений: 28
09.05.2011, 15:13  [ТС]     Англо-русский словарь #8
я или просмотрела или ты пропустил библиотеку одну

вроде как для читаемости русского текста нужно вот так:
#include <locale>
setlocale(LC_ALL,"Russian");

но это тоже иногда почему-то не срабатывает..
D1mex
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 16
09.05.2011, 15:38     Англо-русский словарь #9
это есть вроде мне говорили надо попробовать забить в файл по русски а потом взять это оттуда я вот не совсем пойму как достать оттуда и как еще объясните пожалуйста записать в конец файла
free-cat
0 / 0 / 1
Регистрация: 13.12.2015
Сообщений: 3
06.04.2016, 23:39     Англо-русский словарь #10
Суть в том, что данная функция работает только с потоком вывода, если же использовать поток ввода, то там будет все та же непонятная абракадабра.

Используйте библиотеку windows.h
И команды вместо setlocate
C++ (Qt)
1
2
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
07.04.2016, 00:03     Англо-русский словарь #11
Цитата Сообщение от free-cat Посмотреть сообщение
Используйте библиотеку windows.h
И команды вместо setlocate
Цитата Сообщение от free-cat Посмотреть сообщение
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
не используйте windows.h без необходимости.
и не используйте SetConsoleCP/SetConsoleOutputCP
если можете использовать setlocate
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2016, 00:32     Англо-русский словарь
Еще ссылки по теме:

Курсовая работа на тему англо-русский словарь C++
C++ Англо-русский словарь построен в виде двоичного дерева в программе с++
Реализовать русско-английский и англо-русский словарь C++

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

Или воспользуйтесь поиском по форуму:
meJevin
 Аватар для meJevin
154 / 146 / 57
Регистрация: 18.11.2015
Сообщений: 608
Завершенные тесты: 1
07.04.2016, 00:32     Англо-русский словарь #12
Щас бы спустя триллион лет ответить в тему
Yandex
Объявления
07.04.2016, 00:32     Англо-русский словарь
Ответ Создать тему
Опции темы

Текущее время: 01:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru