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

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

Восстановить пароль Регистрация
 
SerG_doS
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 19
07.01.2014, 23:19     Поиск слова которое встречается чаще всех #1
Есть строка определить какое слово встречается в строке чаще всего и вывести его. Помогите пожалуйста очень надо. Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2014, 23:19     Поиск слова которое встречается чаще всех
Посмотрите здесь:

C++ Поиск елемента 2-хмерного массива который встречается во всех строках
Определить какое слово в строке встречается чаще всего C++
Поиск слова которое начинается и заканчивается на одну букву C++
Найти число в двумерном массиве, которое чаще всего повторяется C++
Определить какая согласная чаще всего встречается C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
08.01.2014, 00:44     Поиск слова которое встречается чаще всех #2
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;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.01.2014, 01:57     Поиск слова которое встречается чаще всех #3
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;
}
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
08.01.2014, 11:43     Поиск слова которое встречается чаще всех #4
Цитата Сообщение от 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;
}
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
08.01.2014, 14:24     Поиск слова которое встречается чаще всех #5
Цитата Сообщение от TrueBit Посмотреть сообщение
сыпется при вводе string string str str
Ну да...сорри
Вот такой костылёчек надумал:
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
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
 
int func (string str,string tmp)
{
    int k = 0;
    unsigned int i = 0;
    string temp;
    while (i<str.length())
    {
        if (isalpha(str[i]))
        {
            temp.clear();
            while (i<str.length() && isalpha(str[i]))
            {
                temp.append (1,str[i]);
                ++i;
            }
            if (temp==tmp)
                ++k;
        }
        else ++i;
    }
    return k;
}
 
int main()
{
    string str,tmp,mx;
    getline (cin, str);
    if (str.empty())
       cout <<"Stroka is empty\n";
    else
    {
        unsigned 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 <<endl;
    }
    return 0;
}
Yandex
Объявления
08.01.2014, 14:24     Поиск слова которое встречается чаще всех
Ответ Создать тему
Опции темы

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