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

В заданном словаре найти все анаграммы - C++

Восстановить пароль Регистрация
 
mamzel
1 / 1 / 0
Регистрация: 30.10.2014
Сообщений: 30
20.01.2016, 13:48     В заданном словаре найти все анаграммы #1
Задается словарь. Найти с помощью процедуры в нем все анаграммы (слова, составленные из одних и тех же букв).
Я считываю файл и пытаюсь с помощью множества пока что найти в нем анаграммы. С самого начала наткнулся на проблему. Не получается записать во множество 's' слой файл.
Прошу помогите) Может идейку какую-нибудь подкинете, каким еще способом можно найти те самые анаграммы. Функцией strcmp,я думаю, тоже навряд ли выйдет, ибо она ищет различие в словах до несовпадения(
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
#include <iostream> 
#include <fstream>
#include <cstring>
#include <cstdio>
#include <string>
#include <algorithm>
#include <set>
using namespace std;
 
int main()
{
    setlocale(0,"RUS");
    cout << "Введите название файла: ";
    char file[255];
    set<char> s;
    string out_s;
    gets(file);
    
    // Прочитаем содержимое
    ifstream i(file);
    cout << "\nПрочитаем содержимое файла " << file << endl;
    while(true) {
    getline(i, out_s);
    if(!i.eof())
        cout << out_s << endl;
    else break;
    }
    
    for(int i=0;out_s[i]!=0;i++)
    {
        s.insert(out_s[i]);
    }
    
    // Поиск анаграмм
    if(s.find('1') != s.end())
    {
        cout << " YRA ";
    }
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2016, 13:48     В заданном словаре найти все анаграммы
Посмотрите здесь:

C++ найти все корни уравнения на заданном интервале [a;b] с заданной точностью
C++ Найти все корни уравнения на заданном интервале
C++ Проверить, что все слова заданной строки упорядочены в лексикографическом порядке (как в словаре)
Задается словарь. Найти в нем все анаграммы C++
Найти все локальные минимумы и максимумы в заданном массиве C++
Найти все простые числа в заданном диапазоне и вывести их на экран C++
C++ Для заданного длинного слова найти в словаре все слова
C++ Найти в тексте все слова анаграммы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,629
Завершенные тесты: 1
20.01.2016, 13:54     В заданном словаре найти все анаграммы #2
сортировать буквы в словах. а потом тупо strcmp.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,654
20.01.2016, 20:47     В заданном словаре найти все анаграммы #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
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
//Задается словарь. Найти с помощью процедуры в нем все анаграммы (слова, составленные
//из одних и тех же букв).
///////////////////////////////////////////////////////////////////////////////
#include <fstream>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                 T_str;
typedef std::multiset   < char  >   T_symb_multiset;
///////////////////////////////////////////////////////////////////////////////
struct  T_less_symb_multiset
{
    //-------------------------------------------------------------------------
    bool    operator()
        (
            T_str   const   &   L,
            T_str   const   &   R
        )
    {
        T_symb_multiset     LL  (
                                    L.begin     (),
                                    L.end       ()
                                );
 
        T_symb_multiset     RR  (
                                    R.begin     (),
                                    R.end       ()
                                );
 
        return  LL  <   RR;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
typedef std::multiset
    <
        T_str,
        T_less_symb_multiset
    >
    T_anagrams;
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::ifstream   ifile("i.txt");
 
    if( !ifile )
    {
        std::cout   <<  "Error!"
                    <<  std::endl;
 
        system("pause");
        exit(0);
    }
 
    T_anagrams  anagrams;
 
    std::copy
        (
            std::istream_iterator< T_str >  ( ifile ),
            std::istream_iterator< T_str >  (),
 
            std::inserter
                (
                    anagrams,
                    anagrams.begin()
                )
        );
 
    if  (
            anagrams.empty()
        )
    {
        std::cout   <<  "File is empty."
                    <<  std::endl;
    }
 
    for (
            auto
            L   =   anagrams.begin  (),
            R   =   L;
            R   !=  anagrams.end    ();
            L   =   R
        )
    {
        R               =   anagrams.upper_bound    ( *L );
        auto    dist    =   std::distance           ( L,    R );
 
        if  (
                dist    >   1
            )
        {
            std::cout   <<  dist
                        <<  " anagrams:"
                        <<  std::endl;
 
            std::copy
                (
                    L,
                    R,
                    std::ostream_iterator< T_str >  ( std::cout,  "\t" )
                );
 
            std::cout   <<  std::endl
                        <<  std::endl;
        }//if
    }//for
}
Yandex
Объявления
20.01.2016, 20:47     В заданном словаре найти все анаграммы
Ответ Создать тему
Опции темы

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