Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097

Что сделать что бы консольная строка разбивалась на слова для перевода?

27.02.2016, 22:54. Показов 608. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Закоментировал разбиение консльной строки на слова.Остальной кусок программы переводит по одному слову английскому на руский язык из файла words.txt.Мне нужно что бы cчитывалась строка английских слов из клавиатуры,она разбивалась на слова и далее выводился их перевод в одной строке.Что и как сделать?words.txt
Например введеная строка
all will be well.
должен вывестись перевод
Ве будет хорошо.

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
// translate eng to rus.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>
#include <fstream>
#include <locale>
#include <sstream>
#include <stdio.h>
#include <windows.h> 
 
using namespace std;
char seps[] = " :!?.,\t\n";
char *tok;
char buf1[100];
 
 
int _tmain(int argc, _TCHAR* argv[])
{
     setlocale(LC_CTYPE, "Russian");
   typedef multimap<string, string> strMap;
 
   strMap enru;
   strMap::iterator it;
   
   stringstream ss;
 
   string en;
   string ru;
   string eng[100]; 
 int ii=0;
   ifstream fin("C:/Users/user/Downloads/translateengtoruc_c/words.txt",ios::in | ios::binary);
 
   string buff;
   while (!fin.eof())
   {
      getline(fin, buff);
      ss << buff;
      ss >> en >> ru;
 
      enru.insert(make_pair(en,ru));
   }
 
   //-----------------------------------------------------------
 
   while (true)
   {
       cout <<"введите английское слово: ";
      getline(cin, buff);
     
 
 
//разбиение строки на слова ***************
    //  cin.getline(buf1, 100);
    //  tok = strtok( buf1, seps );
       //    while( tok != NULL )
             //       {
                //      eng[ii]=tok;
                //  printf( " %s\n", tok );
                  //      tok = strtok( NULL, seps );
                    //  ii=ii+1;
                                            //  }
//*****************************************
    
      ru.clear();
      ss.clear();
      ss << buff;
      for (ss >> en; !en.empty(); ss >> en)
      {
         it = enru.find(en);
 
         if (it != enru.end())
         {
            ru += it->second;
         }
         else
         {
            ru += "<UNKNOWN>";
         }
         ru += " ";
         en.clear();
      }
 
      cout << "перевод: " << ru << endl;
                       
      system("Pause"); 
   }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2016, 22:54
Ответы с готовыми решениями:

Дана строка, слова в которой разделены пробелами. Оставьте в ней только те слова, которые начинаются на ту же букву, что и первое слово.
5.17 Дана строка, слова в которой разделены пробелами. Оставьте в ней только те слова, которые начинаются на ту же букву, что и первое...

Почему не компилирует слова по русски, а выводит иероглифы какието? что для этого сделать надо?
Почему не компилирует слова по русски, а выводит иероглифы какието? что для этого сделать надо?

Что сделать, для того что бы транзакция откатила изменение в таблицах при ошибке?
BEGIN TRANSACTION INSERT INTO City (name) values ('Запорожье') INSERT INTO OS (architecture,name,producer) values (1,'Leopard',1) ...

4
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
28.02.2016, 00:23
Предлагаю так. Сначала превращаем все разделители в пробелы, а затем полученную строку закидываем в stringstream и считываем уже по словам.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstring>
using namespace std;
 
bool is_seperator (char ch) {
    return strchr(",!", ch) != NULL;
}
 
int main() {
    string line;
    getline(cin, line);
    replace_if(line.begin(), line.end(), is_seperator, ' ');
    stringstream words(line);
    string word;
    int i = 1;
    while (words >> word) {
        cout << i++ << ". " << word << endl;
    }
    return 0;
}
Код в действии

Добавлено через 36 минут
Советую код разбивать на куски и оформлять в виде функций. Так и читать и писать код становиться проще.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
28.02.2016, 01:57  [ТС]
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
// ConsoleApplication12.cpp: определяет точку входа для консольного приложения.
//Разбиение строки введеной с клавиатуры на слова и  их вывод по порядку.
//Переводит несколько слов.Выводитья несколько дублей перевода.Как это устранить?
 
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <map>
#include <string>
#include <fstream>
#include <locale>
#include <sstream>
using namespace std;
 
bool is_seperator (char ch) {
    return strchr(",!?.:", ch) != NULL;
}
 
int main() {
    
   string line;
   typedef multimap<string, string> strMap;
   strMap enru;
   strMap::iterator it;
   stringstream ss;
   string en;
   string ru;
 
   ifstream fin("C:/Users/user/Downloads/translateengtoruc_c/words.txt",ios::in | ios::binary);
 
  
   while (!fin.eof())
   {
      getline(fin, line);
      ss << line;
      ss >> en >> ru;
 //eng to rus
      enru.insert(make_pair(en,ru));
//rus to eng 
//enru.insert(make_pair(ru,en));
   }
 
 
   while (true)
   {
cout <<"vedite stroku: "<< endl;
      getline(cin, line);
      ru.clear();
      ss.clear();
      ss << line;
 
 
    replace_if(line.begin(), line.end(), is_seperator, ' ');
    stringstream words(line);
    string word;
    int i = 1;
    while (words >> word) {
 
        for (ss >> en; !en.empty(); ss >> en)
      {
         it = enru.find(en);
         if (it != enru.end())
         {
            ru += it->second;
         }
         else
         {
            ru += "<UNKNOWN>";
         }
         ru += " ";
         en.clear();
      }
        cout << "perevod: " << ru << endl;
        //cout << i++ << ". " << word << endl;
    }
    system("Pause"); 
    return 0;
}
   }
Добавлено через 26 минут
еще не переводит если встречает разделитель типа запятой,точки,двоеточия,дефис,тире,воскл ицательный знак,знак вопрос.

Добавлено через 47 секунд
еще не переводит если встречает разделитель типа запятой,точки,двоеточия,дефис,тире,воскл ицательный знак,знак вопрос.
0
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
28.02.2016, 11:52
Просто добавьте в функцию is_seperator нужные вам разделители -- символы, которые вы хотите игнорировать.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
28.02.2016, 12:12  [ТС]
так они же в 18й строке добавлены.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2016, 12:12
Помогаю со студенческими работами здесь

Что означает Variant (для перевода на другой ЯП)
Есть следующий код: Dim OriginArray(1 To 3) As Variant Dim Origin(1 To 2) As Double '. . . . Origin(1) = 0.03 Origin(2) = 0.03 ...

select как сделать что бы отображалась в верху нужная строка
Знаю индекс строки как сделать что бы при запуске страницы отображалась вверху select именно строка с этим индексом, а не первая идущая в...

Как сделать, что бы строка сообщения в MessageBox была полужирной
Здравствуйте! Как сделать, что бы строка была полужирной?

Как сделать что бы не каждая строка выводилась, а только одно значение?
Как сделать что бы не каждая строка выводилась, а только одно значение using System; using System.Collections.Generic; using...

Вводится строка и символ разделитель. На выходе то, что до символа разделителя и то, что после него
Условие:вводится строка, затем символ разделитель. На выходе должно получаться две строки s1 - то что до символа разделителя и s2 - то что...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru