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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
artlinenn
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 58
#1

Анаграммы - C++

02.05.2013, 00:59. Просмотров 847. Ответов 3
Метки нет (Все метки)

Задается словарь. Найти в нем все анаграммы (слова, составленные из одних и тех же букв).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 00:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Анаграммы (C++):

Анаграммы - C++
Анаграммой слова называется любая перестановка всех букв слова. Например, из слова SOLO можно получить 12 анаграмм: SOLO, LOSO, OSLO, OLSO,...

Слова-анаграммы - C++
Для заданного с клавиатуры слова построить все его анаграммы, т.е. слова (возможно бессмысленные), состоящие из всех букв исходного слова,...

Файлы и анаграммы - C++
Во входном файле input.txt содержаться строка не более 255 символов, в которой через один или несколько пробелов следует слово. Найти все...

Анаграммы(олимпиадная задача) - C++
Cтрока S1 называется анаграммой строки S2, если она получается из S2 перестановкой символов. Даны строки S1 и S2. Напишите программу,...

Найти в тексте все слова анаграммы - C++
Кто может плиз.. Найти в тексте все слова анаграммы.

В заданном словаре найти все анаграммы - C++
Задается словарь. Найти с помощью процедуры в нем все анаграммы (слова, составленные из одних и тех же букв). Я считываю файл и пытаюсь с...

3
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
02.05.2013, 06:36 #2
Цитата Сообщение от artlinenn Посмотреть сообщение
Задается словарь
где?

Добавлено через 1 час 7 минут
Вот такая вот кривулина
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 <fstream>
 
using std::ifstream;
 
bool _compare( char* a, char *b){
    for( int i = 0; a[i]!='\0'; i++){
        if( a[i] != b[i]){
            return false;
            break;
        }
    }
    return true;
};
bool compare( char *a, char *b ){
    int count = 0;
    int d[1024];
    
    if( !_compare(a,b)){
        for(int i = 0; a[i]!='\0'; i++){
            for(int j = 0; b[j]!='\0'; j++){
                bool fl = true;
                for(int k = 0; k<count; k++){
                    if( j == d[k] ){
                        fl = false;
                        break;
                    };
                };
                if( fl ){
                    if(a[i] == b[j] ){
                        d[count++] = j;
                        break;
                    };
                }
            }
        };
    };
 
    if( count == strlen(b) ){
        return true;
    };
    return false;
}
 
int main(){
    setlocale(0,"");
    char temp[64], temp2[64];
    ifstream fjalor("fjalor.txt");
    while( !fjalor.eof() && fjalor.getline(temp,sizeof(temp))){
        ifstream tempFjalor("fjalor.txt");
        bool fl = true;
        while( !tempFjalor.eof() && tempFjalor.getline(temp2,sizeof(temp2))){
            if( compare(temp, temp2) ){
                if( fl ) { std::cout << "Для " << temp << std::endl; fl = false; }
                std::cout << temp2 << std::endl;
            };
        };
    };
    return 0;
}
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
02.05.2013, 07:27 #3
словарь
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
02.05.2013, 23:31 #4
На коленке, но все пары анаграмм выводит.
Список слов отсюда.
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
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <iterator>
#include <algorithm>
 
class Word {
 public:
  Word() {}
  Word(const std::string &word) : word(word), size(word.size()),
    sumOfLetters(getSumOfLettersForAWord(word)), sorted(word) {
    std::sort(sorted.begin(), sorted.end());
  }
  const std::string &getWord() const { return word; }
  const std::string &getSortedWord() const { return sorted; }
  int getSize() const { return size; }
  int getSumOfLetters() const { return sumOfLetters; }
  static int getSumOfLettersForAWord(const std::string &word) {
    int result = 0;
    for (size_t i = 0; i < word.size(); ++i) {
      result += word[i];
    }
    return result;
  }
 private:
  std::string word;
  int size;
  int sumOfLetters;
  std::string sorted;
};
 
bool operator<(const Word &a, const Word &b) {
  if (a.getSize() == b.getSize()) {
    if (a.getSumOfLetters() == b.getSumOfLetters()) {
      return a.getWord() < b.getWord();
    }
    return a.getSumOfLetters() < b.getSumOfLetters();
  }
  return a.getSize() < b.getSize();
}
 
std::ostream &operator<<(std::ostream &stream, const Word &word) {
  return stream << "Word{" <<
    "word='" << word.getWord() << "'," <<
    "size=" << word.getSize() << "," <<
    "sumOfLetters=" << word.getSumOfLetters() << "}";
}
 
int main() {
  std::ifstream file("brit-a-z.txt");
  std::set<Word> words;
 
  while (!file.eof()) {
    std::string word;
    std::getline(file, word);
    if (!file.eof()) {
      words.insert(Word(word));
    }
  }
 
  for (std::set<Word>::const_iterator i = words.begin(); i != words.end();) {
    std::set<Word>::const_iterator j = i; ++j;
    while (j->getSize() == i->getSize() && j->getSumOfLetters() == i->getSumOfLetters()) {
      ++j;
    }
 
    for (std::set<Word>::const_iterator k = i; k != j; ++k) {
      std::set<Word>::const_iterator l = k;
      for (++l; l != j; ++l) {
        if (k->getSortedWord() == l->getSortedWord()) {
          std::cout << k->getWord() << " <-> " << l->getWord() << std::endl;
        }
      }
    }
    i = j;
  }
 
  return 0;
}
Добавлено через 1 минуту
Суть в том, что все слова сортируются по длине, затем по сумме символов.
Потом проходим по всем группам одинаковой длинны и одинаковой сумме символов, набирая из них настоящие пары анаграмм.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 23:31
Привет! Вот еще темы с ответами:

Задается словарь. Найти в нем все анаграммы - C++
задали задачу Задается словарь. Найти в нем все анаграммы (слова, составленные из одних и тех же букв). смысл понятен,но непонятно как...

Строки.Анаграммы.(Задача сделана,но не выводит результат...) - C++
Даны 2 слова(строки),проверить есть ли эти слова анаграммами(отличаются только порядком букв) // анаграмма].cpp : Defines the entry point...

вывести слова - анаграммы из словаря, состоящего из пар слов(при чтении в обратном порядке образуется другое слово) - C++
Ребят, помогите пожалуйста написать прогу на С++=(в задании не было сказано что бы считывало с файла, поэтому, можно все, прямо в проге...

Анаграммы - Pascal
1)Входной файл содержит дату в формате dd.mm.gggg.Гарантируется, что это корректная дата. Программа должна вывести дату следующего дня в...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
02.05.2013, 23:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru