| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Динамический список!!! |
| Автор: kleks 16.11.2005, 18:44 |
| Имеется дин. список элементами которого являются произвольные слова. Надо: вывести на экран все слова, имеющие анаграммы. Слово группируется вместе со своими анаграммами в одну строку. Слова отделяются запятыми. Повторные анаграммы игнорируются. Пример: Список: aбв бббаб аба баа авбг ваа баа авб Вывод: абв,авб аба,баа Подскажите пожалуйста, как это можно организовать?! |
| Автор: AISIN 16.11.2005, 19:02 |
| а что именно не получается? Берешь одно слово из списка, делаешь его проверку если подходит то запоминаешь его адрес. Берешь другое слово проверяешь его, проверяешь на совподение со словами с уже выбранными адресами и т.д. |
| Автор: Mayk 16.11.2005, 19:12 |
| Думаю имеется в виду оптимизация решения. Можно так - из оставшихся слов сделать пары слов, где один элемент пары first - исходное слово, второй second - отстортированное по алфавиту: (aбв, абв) (бббаб, абббб) (аба, ааб) (баа, ааб) (авбг, абвг) (ваа, аав) (баа, ааб) (авб, абв) Потом сортируешь список по алфавиту по отсотрированным словам: (аба, ааб) (баа, ааб) (баа, ааб) (ваа, аав) (бббаб, абббб) (aбв, абв) (авб, абв) (авбг, абвг) Потом пробегаешь по списку. И если node->second == node->next->second, то у нас анаграмма Не думаю что это самое быстрое решение, но оно ОЧЕНЬ простое. |
| Автор: kleks 17.11.2005, 19:44 | ||||
| Спасибо ОГРОМНОЕ!!! Действительно это самое простое, что можно было придумать!!!! Но тут у меня возникла новая проблемка(относящаяся к данной задачке): у меня имеется список, элементом которого является first - исходное слово, а second - его анаграмма, так вот, я в этом списке хочу удалить повторы...я написал функцию удаления (всё проверил вроде без ошибок), но почему-то вместо того что бы удалять заданный элемент списка (вместе с освобождением памяти) он на его месте пишет такие вот чёрточки: ||||||||| Вот данные функци (поиск эл-та в списке, предыдущий эл-т в списке, удаление эл-та):
В основной программе я например исп. эту функцию так:
В чём проблема объясните пожалуйста?!! Я никак не могу понять... |
| Автор: Mayk 17.11.2005, 19:59 | ||
| Прошу прощения, а зачем все эти телодвижения, next, prev'ы? Ведь есть std::list и std::sort и прочие радости(например std::list::unique С первого взгляда вроде удаление корректно. Хотя хз, я только с универа - плохо соображаю. Мож ты в деструкторе что страшное творишь?
эээ. А это что такое? strcmp не пойдет? |
| Автор: kleks 17.11.2005, 20:17 |
| Вот ведь блин, действительно, в деструкторе напутал!!!! Спасибо!!! |