Ashley Опубликовано 29 июня, 2010 Жалоба Share Опубликовано 29 июня, 2010 Просто вызывать конструктор члена структуры нужно так : struct dictionary { bool final; vector<dictionary*> pointers; dictionary() : pointers(26) {}; }; Это, наверное, странно, но в C++ структура - почти класс.) Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Daniel5555 Опубликовано 29 июня, 2010 Жалоба Share Опубликовано 29 июня, 2010 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 Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Eliont Опубликовано 5 июля, 2010 Жалоба Share Опубликовано 5 июля, 2010 Магия Питона Очень хорошая презентация по Питону демонстрирующая обилие его возможностей. В частности показано несколько трюков, например, как проверить существование переменной чтобы не нарваться на исключение "переменная не определена", а также немного "чёрной магии". rupyru2008-yurevich-pymagic.pdf Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Comb Опубликовано 6 июля, 2010 Жалоба Share Опубликовано 6 июля, 2010 К слову о Питоне, в глаза его не видел но есть необходимость немного его почитать, насколько он отличается по синтаксису и принципу построения от Object-C и обычного C ? Хотя бы до уровня понимания алгоритма "с натяжкой" Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Black Cat Опубликовано 6 июля, 2010 Жалоба Share Опубликовано 6 июля, 2010 В топике книжка по питону лежала Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Eliont Опубликовано 7 июля, 2010 Жалоба Share Опубликовано 7 июля, 2010 Отличается самым кардинальным образом, больше чем второй ребилд от сериала. Книжка здесь. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
antondrafff Опубликовано 21 октября, 2010 Жалоба Share Опубликовано 21 октября, 2010 Спасибо вам люди! Вы сделали мой вечер :) Я прочитал все страницы этой темы, это было незабываемо смешно :) С самого вводного сообщения меня пробило на ржачь... И это чувство не отпускало меня до конца топика. Огромное человеческое спасибо за поднятое настроение! Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Summoner Опубликовано 22 октября, 2010 Жалоба Share Опубликовано 22 октября, 2010 Спасибо вам люди! Вы сделали мой вечер :)Я прочитал все страницы этой темы, это было незабываемо смешно... почитал чуток тему.... то-ли я ещё не достиг Просветления чтобы постичь непонятную мне Истину, толи еще чего, но где смеяться? %). 2antondrafff, отсыпь, а? Я тоже такой хочу, чтоб потом читать код и ржать %). Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Eliont Опубликовано 22 октября, 2010 Жалоба Share Опубликовано 22 октября, 2010 Ага, и мне грЫбочков. Я тоже хочу самым умным быть. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Black Cat Опубликовано 22 октября, 2010 Жалоба Share Опубликовано 22 октября, 2010 почитал чуток тему.... то-ли я ещё не достиг Просветления чтобы постичь непонятную мне Истину, толи еще чего, но где смеяться? %). 2antondrafff, отсыпь, а? Я тоже такой хочу, чтоб потом читать код и ржать %). Не там Истину искал! Истина, она в bool ! Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.