Перейти к содержанию

Программирование Как Оно Есть


call_eax

Рекомендуемые сообщения

Просто вызывать конструктор члена структуры нужно так :

struct dictionary

{

bool final;

vector<dictionary*> pointers;

dictionary()

: pointers(26)

{};

};

Это, наверное, странно, но в C++ структура - почти класс.)

Ссылка на комментарий
Поделиться на другие сайты

Ashley

Спасибо большое.

Это, наверное, странно, но в C++ структура - почти класс.

Да-да, так и есть.

Всем спасибо.

Раз уж на то пошло, то кину-ка я весь код целиком, чтобы выслушать мнения всех желающих высказаться. Как бы что можно сделать лучше, как бы сделали вы и т.д.

Вчера я хотел написать реализацию алгоритма Ахо-Корасика (http://en.wikipedia.org/wiki/Aho-Corasick) на C++, что и было быстро сделано. Сегодня благодаря вашей помощи код скомпилился и он даже работает.

Реализация самая простая, какая только может быть, мне кажется. Только на стандартный латинский алфавит (отсюда и 26 букв :)).

#include <iostream>
#include <string>
using namespace std;

struct dictionary {
   bool final;//bool that indicates the end of the word
   dictionary* pointers[26];//pointers for 26 possible letters
};

void create_dictionary(dictionary* d) {
   d->final = false;
   for (int i = 0; i < 26; ++i) d->pointers[i] = NULL;
}

void add_word(dictionary &d, string word) {
   int size = word.size();
   dictionary* additional;//additional is a pointer to "travel" into dictionary structure
   additional = &d;
   for (int i = 0; i < size; ++i) {
       int path = word[i] - 97;//using ascii table to find a path in the array of pointers
       if (not additional->pointers[path]) {//NULL = false
           additional->pointers[path] = new dictionary;
           create_dictionary(additional->pointers[path]);
       }
       additional = additional->pointers[path];
   }
   additional->final = true;
}

void print_dictionary(dictionary *d, string &s) {//simply prints every word in the dictionary
   if (d->final == true) cout << s << endl;
   for (int i = 0; i < 26; ++i) {
       if (d->pointers[i] != NULL) {
           s.push_back(97 + i);
           print_dictionary(d->pointers[i], s);
           s.resize(s.size()-1);
       }
   }
}

int main() {
   dictionary d;
   create_dictionary(&d);
   string s;
   while (cin >> s) add_word(d, s);
   s.clear();
   print_dictionary(&d, s);
}

Во вложенных файлах программа (пришлось переименовать в .txt из-за ограничений форума) и словарь на >80000 слов.

dictionary_aho.txt

dictionary.txt

Ссылка на комментарий
Поделиться на другие сайты

Магия Питона

Очень хорошая презентация по Питону демонстрирующая обилие его возможностей.

В частности показано несколько трюков, например, как проверить существование переменной чтобы не нарваться на исключение "переменная не определена", а также немного "чёрной магии".

rupyru2008-yurevich-pymagic.pdf

Ссылка на комментарий
Поделиться на другие сайты

К слову о Питоне, в глаза его не видел но есть необходимость немного его почитать, насколько он отличается по синтаксису и принципу построения от Object-C и обычного C ? Хотя бы до уровня понимания алгоритма "с натяжкой"

Ссылка на комментарий
Поделиться на другие сайты

  • 3 months later...

Спасибо вам люди! Вы сделали мой вечер :)

Я прочитал все страницы этой темы, это было незабываемо смешно :) С самого вводного сообщения меня пробило на ржачь... И это чувство не отпускало меня до конца топика. Огромное человеческое спасибо за поднятое настроение!

Ссылка на комментарий
Поделиться на другие сайты

Спасибо вам люди! Вы сделали мой вечер :)

Я прочитал все страницы этой темы, это было незабываемо смешно...

почитал чуток тему.... то-ли я ещё не достиг Просветления чтобы постичь непонятную мне Истину, толи еще чего, но где смеяться? %). 2antondrafff, отсыпь, а? Я тоже такой хочу, чтоб потом читать код и ржать %).

Ссылка на комментарий
Поделиться на другие сайты

почитал чуток тему.... то-ли я ещё не достиг Просветления чтобы постичь непонятную мне Истину, толи еще чего, но где смеяться? %). 2antondrafff, отсыпь, а? Я тоже такой хочу, чтоб потом читать код и ржать %).
Не там Истину искал! Истина, она в bool !
Ссылка на комментарий
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...