![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
Задан динамический символьный массив. Нужно записать в другой массив только те строки, которые встречаются впервые, т.е. каждую строку, начиная со 2-рой нужно сравнить с предыдущими и в случае, если она отличается от них, записать в результирующий динамический массив. Можно ли обращатся к строкам в массиве напрямую, чтоб использовать strcmp? Или прийдется каждую строку сравнивать поэлементно? Подкиньте идеи решения.
-------------------- Don't let the system get you down. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
мы понятия не имеем что такое "динамический символьный массив" и что вы считаете "строкой", так что никто не сможет вам ответить на ваш вопрос. Описывайте ситуацию (с примерами кода) более подробно.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
j l k 5 l 9 k
; k ; 9 l k l [ ; j j u h l Пусть это массив. Тогда: j l k 5 l 9 k строка. -------------------- Don't let the system get you down. |
|||
|
||||
| siew |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.11.2009 Репутация: нет Всего: нет |
Человек наверное имеет ввиду массив строк. А под динамическим я так понимаю, что этот массив во время выполнения программы может меняться, т.е. может удаляить либо добавлять строки. Правильно?
Добавлено через 8 минут и 54 секунды Единственную проблемму которую я тут вижу, это правильное определение этого массива. Если мы пока что забудем , что он динамический , то можно определить его как скажем массив строк: sntring str[10] = {"aaa", "bbb", и т.д.} (нужно посмотреть точно как записываються строки, потому что могу не помнить) либо мы можем определить его как массив указателей на строки char chA[] = "aaa"; char chB[] = "bbb"; char chC[] = "ccc"; и т.д. char Massiv[] = {chA, chB, chC и т.д.} |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Идея - берем std::map<std::string,int> и считаем в нем количество вхождений каждой строки из 1го массива. Затем обходим то, что насчитали, и выводим во 2й массив строки со счетчиком равным 1 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Можно сделать так, как вы хотите (сравнивать все строки с предыдущими), но с оптимизацией: сравнивать не строки, а их хеши (и если хеши совпадают, то сами строки). Работать будет быстро. Если на производетельность плевать, смело сравнивайте строки.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Carlos0N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 9.10.2007 Репутация: нет Всего: 1 |
xvr, думаю главным смыслом этого задания является понять как работать с массивами строк, т.е. понять саму суть реализации работы с ними, а не использовать контейнерные скласы
djamshud, каким образом вы хотите хештровать строки? мне просто интересно)) |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
>каким образом вы хотите хештровать строки? мне просто интересно))
Я - никаким. А каким будет это делать топикстартер, если решит воспользоваться идеей, - не знаю. Если я правильно понял, он не просил написать код. А что вызвало ваше веселье? Мне просто интересно)). Наверное кому-то в этом топике следует подучить матчасть. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Carlos0N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 9.10.2007 Репутация: нет Всего: 1 |
я не пытался посмеятся над вами, видимо )) - эти две скобочки были лишними))
у меня просто глупая привычка везде их ставить, так позитивней имхо)) я и не просил код, просто я так понял вы знаете как это сделать. начал думать как бы захешировать строки, но какого то эффективного алгоритма сразу не придумал, поэтому и спросил. мир, дружба, жвачка? =) |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Сложите все или часть байтов строки - вот и простейший хэш. Можно еще примешать позицию символа в строке. Что-то более сложное и качественно распределяющее хеши для разных строк можно погуглить или прочитать в учебниках по всяким криптографиям.
От плохих привычек принято избавляться;). -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |