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

Поиск слова которое встречается чаще всех - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Максимальное из чисел, встречающихся в матрице болеее одного раза http://www.cyberforum.ru/cpp-beginners/thread1065304.html
serial_max=0; serial=1; digit=0; digit_max=0; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (a==a) {serial++; digit=a;} else serial=1; if (serial_max<serial) {serial_max=serial; serial=0;digit_max=digit;} } }
C++ Вычислить x помогите решить пример пожалуйста)самым простым способом срочно надо!зарание спасибо вот задание http://www.cyberforum.ru/cpp-beginners/thread1065299.html
Максимальный элемент динамического двумерного массива C++
Напишите пожалуйста программу которая находила бы максимальный элемент динамического двумерного массива
C++ boost regex_match - Баг?
Снова неразрешимая проблема ( По документации, функции поиска regex_match/regex_search должны заполнять (делать не пустым) объект с результатами поиска, только если находят все/часть регулярного выражения в строке. В этом коде ну никак не может совпадать ни часть, ни все регулярное выражение. Но объект what на выходе НЕ пустой. #include <boost/regex.hpp> #include <iostream> int main() ...
C++ выдает ошибку на втором файле , подскажите http://www.cyberforum.ru/cpp-beginners/thread1065280.html
по сути программа должна в 1 и 2 файле найти одинаковые слова и записать в 3 . #include "stdafx.h" #include "iostream" #include "algorithm" #include "string" #include "iterator" #include "fstream" #include "set" using namespace std;
C++ Функция должна принять указатель на саму себя не рекурсия. (ошибка в названии) Функция должна принять указатель на саму себя. моя неверная попытка имеет вид int myfunc(int (*P)(int)) принимаю указатель на функцию { return 0; } подробнее

Показать сообщение отдельно
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
08.01.2014, 11:43     Поиск слова которое встречается чаще всех
Цитата Сообщение от MicM Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
 
int func (string str,string tmp)
{
    int k = 0;
    int i;
    while (str.find(tmp)!=-1)
    {
          i = str.find(tmp);
          if ((i+tmp.size()==str.size() && i==0) ||
             (i==0 && !isalpha(str[i+tmp.size()])) ||
             (i+tmp.size()==str.size() && !isalpha(str[i-1])) ||
             (!isalpha(str[i-1]) && !isalpha(str[i+tmp.size()])))
          {
              ++k;
          }
          str.erase(i,tmp.size());
    }
    return k;
}
 
int main()
{
    string str,tmp,mx;
    getline (cin, str);
    if (str.empty())
       cout <<"Stroka is empty\n";
    else
    {
        int i = 0;
        int max = 0;
        while (i<str.length())
        {
            if (isalpha(str[i]))
            {
                tmp.clear();
                while (i<str.length() && isalpha(str[i]))
                {
                      tmp.append (1,str[i]);
                      ++i;
                }
                if (func(str,tmp) > max)
                {
                    max = func(str,tmp);
                    mx = tmp;
                }
            }
            else ++i;
        }
        cout <<mx <<" - " <<max <<endl;
    }
    return 0;
}
сыпется при вводе string string str str

Цитата Сообщение от DiffEreD Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <sstream>
#include <iterator>
#include <string>
#include <algorithm>
#include <functional>
#include <unordered_map>
 
int main()
{
   using input = std::istream_iterator<std::string>;
   using map_t = std::unordered_map<std::string, size_t>;
   using namespace std::placeholders;
 
   std::string s = "one two three one four five one two one three one four";
   std::stringstream iss(s);
   map_t map;
 
   for (auto it = input(iss); it != input(); ++it)
      ++map[*it];
 
   auto max = std::max_element(map.begin(), map.end(),
                               std::bind(std::less<size_t>(),
                               bind(&map_t::value_type::second, _1),
                               bind(&map_t::value_type::second, _2)));
   std::cout << "Result: " << (*max).first << std::endl;
   return 0;
}
Visual Studio 2008, в комплекте нет необходимых библиотек для компиляции.

Слов максимальной длины может быть несколько. Мой вариант для вывода списка слов максимальной длины, в т.ч. и нескольких.

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
#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main () {
    //string str;
    //string str ("string a a a string a b b b b"); // source string
    //string str ("one two three one four five one two one three one four");
    string str ("three one two three one four five one two one three one four three three");
    string temp_word;
    map<string,int> word_counter;
    size_t max_size = 0;
    bool first=true;
    if(str.empty()) {
        cout << "str is empty ";
    } else {
        // map fill
        for(size_t i=0; i<str.size(); i++) {
            if(isalpha(str[i])) {
                if(i==(str.size()-1)) {
                    temp_word.append(str,i,1);
                    word_counter[temp_word]++;
                    temp_word.clear();
                } else {
                    temp_word.append(str,i,1);
                }
            } else if(!temp_word.empty()) {
                word_counter[temp_word]++;
                temp_word.clear();
            }
        }
 
        // find max_size
        for(map<string,int>::iterator it=word_counter.begin(); it!=word_counter.end(); it++)
            if( (*it).second > (int)max_size )
                max_size=(*it).second;
 
        // print max words
        cout << "Max words: ";
        for(map<string,int>::iterator it=word_counter.begin(); it!=word_counter.end(); it++)
            if( (*it).second == max_size )
                if( first ) {
                    cout << (*it).first;
                    first=false;
                }
                else
                    cout << ", " << (*it).first;
    }
    return 0;
}
 
Текущее время: 16:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru