![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
gnokki200 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.4.2008 Репутация: нет Всего: нет |
Доброго времени суток уважаемые форумчане!
Возникла задача на С следующего характера: Есть текстовый файл со строковыми данными. Неоходимо на выходе получить уникальные записи и сколько раз они повторяются. На пхп делаю очень просто:
Но вот как грамотно и оптимально реализовать это на С, ума не приложу. ![]() Теоретически предполагаю, что надо создать два динамических массива, один для строковых данных, другой для количества записей и при получении новой записи искать значение в массиве строковых данных, если найдено, то инкремент в массиве с количеством, если нет, то увеличивать массивы. Хотя очень хочется верить, что такую задачу можно реализовать проще, например как в пхп. ![]() Помогите пожалуйста кто чем сможет. Заранее благодарен! ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
gnokki200,
в C++ было бы примерно то же самое. для Си - сложнее, тебе потребуется динамический массив таких структур: struct string_info { unsigned int hash; // хэш-сумма строки unsigned int count; // счетчик повторов const char* str; // сама строка }; 1. создаешь массив стуктур размера N (malloc) 2. в цикле считываешь строку во временный буфер 2.1 если номер считанной строки превышает размер массива структур, делаешь переаллокацию с N = N*2 3. вычисляешь хэш для считанной строки (функцию хэширования ищешь в сети или пишешь сам) 4. ищешь совпадения хэша в массиве структур string_info 4.1 если совпадение найдено, увеличить счетчик 4.2 если не найдено, инициализация структуры (счетчик=1, копия строки через strdup) 5. вывод результатов 6. освобождение памяти Добавлено через 38 секунд PS. уникальные записи не могут повторяться |
|||
|
||||
gnokki200 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.4.2008 Репутация: нет Всего: нет |
||||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
gnokki200,
в C++ будет проще, потому что как и в php есть обьектные аналоги для строки и ассоциативного массива
|
|||
|
||||
gnokki200 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.4.2008 Репутация: нет Всего: нет |
Rififi, миллионы спасибо!!! Все получилось!
![]() Для успокоения совести на досуге помучаю конечно еще и на С. ![]() PS. если кто забредет сюда с подобным вопросом, вот еще похожий топик напечатать слова, которые встречаются в массиве только один раз |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |