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

Поиск популярного триплета. Конструктивная критика - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вместо включения используйте закрытое наследование http://www.cyberforum.ru/cpp-beginners/thread1233787.html
Здравствуйте. Изучаю С++ по книге Прата С. "Язык программирования С++. Лекции и упражнения". Столкнулся с проблемой. Есть задание: Выполните еще раз упражнение 1, но вместо включения используйте закрытое наследование. Здесь также могут пригодиться несколько объявлений typedef. Подумайте, как можно применить следующие операторы: PairArray::operator=(PairArray(Arraylnt() , Arraylnt())); ...
C++ Обеспечить работу приложения с БД Firebird на других ПК Добрый день. Есть программа с бд на firebird, как скомпилировать программу так, что бы на компьютере где нет firebird она запускалась и работала? http://www.cyberforum.ru/cpp-beginners/thread1233780.html
C++ Изучение С++ с нуля
Всем привет. Вчера зарегистрировался на форуме. Хочу изучить C++, но нет никаких знаний в этом направлении. Какие книги можно почитать абсолютному начинающему, который вообще не в курсе что такое программирование??? Как изучить C++ основательно, чтоб без пробелов? может начать с математики. короче у вас большой опыт. помогите... особыми умственными способностями, мягко говоря, не обладаю....
C++ Конкатенация строк: Зачем строки создаются в динамической памяти?
Есть программа, которая делает конкатенацию строк. #include <iostream> using namespace std; char* Concatenate(char* string1, char* string2) { int lengthString1 = GetLength(string1); int lengthString2 = GetLength(string2); int lengthString3 = lengthString1 + lengthString2; int charString1 = 0;
C++ Помогите найти ошибку в решении биквадратного уравнения http://www.cyberforum.ru/cpp-beginners/thread1233710.html
Здравствуйте,написал код,проблема в том,если выполняется строка 31,то и всегда будет выполнятся строка под номером 39,как это исправить? писал по алгоритму,должно быть все правильно. Программа работает хорошо,только выводит на экран пару лишних иксов. Для примера можно взять 4(x^4)- 5(x^2)+1=0. Ответ равен 1, -1, 0.5, -0.5; у меня выбивает следующие: x1=1; x2=-1; x3=0.5; x4=-0.5; x1=-1; x2=1; -...
C++ Как обратиться к свойству класса Нубский вопрос, вот код: #include "stdafx.h" #include <iostream> using namespace std; class HelloClass подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
25.07.2014, 14:42     Поиск популярного триплета. Конструктивная критика
Как-то так, чуть покороче. Но еще я бы нашел алгоритм для разбора слова на триплеты... Но пока не удалось.

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
#include <string>
#include <vector>
#include <map>
#include <iostream>
 
#include <boost/algorithm/string.hpp>
 
const int triplet_length = 3;
 
std::map<std::string, int> create_triplets(const std::string& string)
{
   std::string str = string;
   std::replace_if(str.begin(), str.end(), [](const char value) { return !isalpha(value); }, ' ');
   std::vector<std::string> words;
   boost::split(words, str, boost::is_any_of(" "), boost::token_compress_on);
   words.erase(std::remove_if(words.begin(), words.end(), [](const std::string& w) { return w.length() < triplet_length; }),
   words.end());
   std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
 
   std::map<std::string, int> result;
   for (const std::string& w : words)
   {
      for (std::string::const_iterator pos = w.begin(); pos != w.end(); ++pos)
      {
         std::string::const_iterator next = pos + 3;
         if (next >= w.end())
         {
            break;
         }
         std::string triplet(pos, next);
         std::transform(triplet.begin(), triplet.end(), triplet.begin(), tolower);
         std::map<std::string, int>::iterator tpos = result.find(triplet);
         if (tpos == result.end())
         {
            result.insert(std::make_pair(triplet, 1));
         }
         else
         {
            ++tpos->second;
         }
      }
   }
   return result;
}
 
int main()
{
   const std::string str = "Karl y Klari ykral koralli, a Klara y Karla ykrala klarnet";
   //"Карл у Клары украл кораллы, а Клара у Карла украла кларнет";
   const std::map<std::string, int> triplets = create_triplets(str);
   const int max = std::max_element(triplets.begin(), triplets.end(),
         [](const std::pair<std::string, int>& p1, const std::pair<std::string, int>& p2)
         {
            return std::max(p1.second, p2.second);
         }
   )->second;
   for (const auto& p : triplets)
   {
      if (p.second == max)
      {
         std::cout << "triplet: " << p.first << " " << p.second << std::endl;
      }
   }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru