| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Динамический символьный массив |
| Автор: Metalex 24.11.2009, 22:39 |
| Задан динамический символьный массив. Нужно записать в другой массив только те строки, которые встречаются впервые, т.е. каждую строку, начиная со 2-рой нужно сравнить с предыдущими и в случае, если она отличается от них, записать в результирующий динамический массив. Можно ли обращатся к строкам в массиве напрямую, чтоб использовать strcmp? Или прийдется каждую строку сравнивать поэлементно? Подкиньте идеи решения. |
| Автор: jonie 25.11.2009, 08:21 |
| мы понятия не имеем что такое "динамический символьный массив" и что вы считаете "строкой", так что никто не сможет вам ответить на ваш вопрос. Описывайте ситуацию (с примерами кода) более подробно. |
| Автор: Metalex 25.11.2009, 08:56 |
| j l k 5 l 9 k ; k ; 9 l k l [ ; j j u h l Пусть это массив. Тогда: j l k 5 l 9 k строка. |
| Автор: siew 25.11.2009, 09:45 |
| Человек наверное имеет ввиду массив строк. А под динамическим я так понимаю, что этот массив во время выполнения программы может меняться, т.е. может удаляить либо добавлять строки. Правильно? Добавлено через 8 минут и 54 секунды Единственную проблемму которую я тут вижу, это правильное определение этого массива. Если мы пока что забудем , что он динамический , то можно определить его как скажем массив строк: sntring str[10] = {"aaa", "bbb", и т.д.} (нужно посмотреть точно как записываються строки, потому что могу не помнить) либо мы можем определить его как массив указателей на строки char chA[] = "aaa"; char chB[] = "bbb"; char chC[] = "ccc"; и т.д. char Massiv[] = {chA, chB, chC и т.д.} |
| Автор: xvr 25.11.2009, 18:11 | ||
Идея - берем std::map<std::string,int> и считаем в нем количество вхождений каждой строки из 1го массива. Затем обходим то, что насчитали, и выводим во 2й массив строки со счетчиком равным 1 |
| Автор: djamshud 26.11.2009, 02:25 |
| Можно сделать так, как вы хотите (сравнивать все строки с предыдущими), но с оптимизацией: сравнивать не строки, а их хеши (и если хеши совпадают, то сами строки). Работать будет быстро. Если на производетельность плевать, смело сравнивайте строки. |
| Автор: Carlos0N 28.11.2009, 16:42 |
| xvr, думаю главным смыслом этого задания является понять как работать с массивами строк, т.е. понять саму суть реализации работы с ними, а не использовать контейнерные скласы djamshud, каким образом вы хотите хештровать строки? мне просто интересно)) |
| Автор: djamshud 28.11.2009, 19:11 |
| >каким образом вы хотите хештровать строки? мне просто интересно)) Я - никаким. А каким будет это делать топикстартер, если решит воспользоваться идеей, - не знаю. Если я правильно понял, он не просил написать код. А что вызвало ваше веселье? Мне просто интересно)). Наверное кому-то в этом топике следует подучить матчасть. |
| Автор: Carlos0N 28.11.2009, 19:54 |
| я не пытался посмеятся над вами, видимо )) - эти две скобочки были лишними)) у меня просто глупая привычка везде их ставить, так позитивней имхо)) я и не просил код, просто я так понял вы знаете как это сделать. начал думать как бы захешировать строки, но какого то эффективного алгоритма сразу не придумал, поэтому и спросил. мир, дружба, жвачка? =) |
| Автор: djamshud 28.11.2009, 20:17 |
| Сложите все или часть байтов строки - вот и простейший хэш. Можно еще примешать позицию символа в строке. Что-то более сложное и качественно распределяющее хеши для разных строк можно погуглить или прочитать в учебниках по всяким криптографиям. От плохих привычек принято избавляться;). |